您的位置:首页 > 大数据 > 人工智能

220. Contains Duplicate III

2016-12-05 07:18 274 查看
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.

维护一个windon

treeset:

ceiling(E e)


Returns the least element in this set greater than or equal to the given element, or
null
if there is no such element.

floor(E e)

Returns the greatest element in this set less than or equal to the given element, or
null
if there is no such element.

remove(Object o)

Removes the specified element from this set if it is present.

public class Solution {
public boolean containsNearbyAlmostDuplicate(int[] nums, int k, int t) {
if(nums.length < 2 || t < 0) return false;
TreeSet<Integer> set = new TreeSet<Integer>();
for(int i = 0 ; i < nums.length; i++){
Integer floor = set.floor(nums[i] + t);
Integer ceil = set.ceiling(nums[i] - t);
if(floor != null && floor >= nums[i] || ceil != null && ceil <= nums[i])
return true;
set.add(nums[i]);
if(i >= k) set.remove(nums[i-k]);
}
return false;
}
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: