首页 > 其他 > 详细

Contains Duplicate III

时间:2015-10-29 02:10:27      阅读:283      评论:0      收藏:0      [点我收藏+]

Given an array of integers, find out whether there are two distinct indices?i?and?j?in the array such that the difference between?nums[i]?and?nums[j]?is at most?t?and the difference between?i?and?j?is at most?k.

?

public class Solution {
	public boolean containsNearbyAlmostDuplicate(int[] nums, int k, int t) {
    	if (k <= 0 || t < 0) {
    		return false;
    	}
    	TreeSet<Integer> treeSet = new TreeSet<>();
        for (int i = 0; i < nums.length; i++) {
        	int n = nums[i];
			if ((treeSet.floor(n) != null && (long)n - treeSet.floor(n) <= t) ||
					(treeSet.ceiling(n) != null && treeSet.ceiling(n) - (long)n <= t)) {
				return true;
			} else {
				treeSet.add(n);
			}
			if (i >= k) {
				treeSet.remove(nums[i-k]);
			}
		}
        return false;
    }
}

?

Contains Duplicate III

原文:http://hcx2013.iteye.com/blog/2252787

(0)
(0)
   
举报
评论 一句话评论(0
关于我们 - 联系我们 - 留言反馈 - 联系我们:wmxa8@hotmail.com
© 2014 bubuko.com 版权所有
打开技术之扣,分享程序人生!