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.
solution:
first thought to use window, size is k, the window stores k elements in order. every time only need to compare two smallest number in this window to see if difference smaller than t. But we also need to consider the bigger number in the window.
public boolean containsNearbyAlmostDuplicate(int[] nums, int k, int t) {
if(k<1 || t<0 || nums == null || nums.length == 0) return false;
int len = nums.length;
SortedSet<Long> window = new TreeSet<Long>();
for(int i=0;i<len;i++){
SortedSet<Long> subset = window.subSet((long)nums[i]-t, (long)nums[i]+t+1);
if(!subset.isEmpty()) return true;
if(i>=k) window.remove((long)nums[i-k]);
window.add((long)nums[i]);
}
return false;
}
O(n log(k)). There should be O(n) solution.

本文介绍了一种在整数数组中查找是否存在两个不同索引i和j,使得nums[i]和nums[j]之间的差小于等于t,且i和j之间的差小于等于k的方法。采用TreeSet实现滑动窗口,确保窗口大小始终不超过k,并通过比较窗口内的元素来判断是否存在满足条件的两个数。

758

被折叠的 条评论
为什么被折叠?



