思路:
滑动窗口大小为k,在窗口内如果有一对差值<=t的数,那么返回true,扫描完数组中全部的数,如果都不存在上面的条件,则返回false。
借助数据结构来找到窗口中与要加入的值的最小差值。
Java code:
public class Solution {
public boolean containsNearbyAlmostDuplicate(int[] nums, int k, int t) {
TreeSet<Integer> set = new TreeSet<Integer>();
for(int i = 0; i < nums.length; ++i) {
if(set.size() == k + 1) set.remove(nums[i - k - 1]);
if(set.floor(nums[i]) != null && nums[i] <= t + set.floor(nums[i])) return true;
if(set.ceiling(nums[i]) != null && set.ceiling(nums[i]) <= t + nums[i]) return true;
set.add(nums[i]);
}
return false;
}
}