这道题确实和之前的I,II有很大差别,
当中自己也是要学甚多新的东西
1. 我们需要学习SortedSet的思维和用法
2. 这种特殊的二叉搜索
3. 知道为啥吗
set.remove((long)nums[i - k]);
public class Solution {
public boolean containsNearbyAlmostDuplicate(int[] nums, int k, int t) {
//if (nums == null || nums.length < 2) {
if (k < 1 || t < 0 || nums == null || nums.length < 2) {
return false;
}
SortedSet<Long> set = new TreeSet<>();
for (int i = 0; i < nums.length; i++) {
//SortedSet<Long> subSet = set.subSet(nums[i] - t, nums[i] + t + 1);
SortedSet<Long> subSet = set.subSet((long)nums[i] - t, (long)nums[i] + t + 1);
if (subSet.size() != 0) {
return true;
}
if (i - k >= 0)
//subSet.remove(nums[i - k]);
set.remove((long)nums[i - k]);
//subSet.add(nums[i]);
subSet.add((long)nums[i]);
}
return false;
// Map<Integer, Integer> map = new HashMap<>();
// for (int i = 0; i < nums.length; i++) {
// map.put(nums[i], i);
// while (t >= 0) {
// if (map.containsKey(nums[i] - t)) {
// int index = map.get(nums[i] - t);
// int sub = i - index;
// if (sub <= k) {
// return true;
// } else {
// }
// } else {
// }
// t--;
// }
// }
// return false;
}
}