class Solution {
public boolean containsNearbyAlmostDuplicate(int[] nums, int k, int t) {
//使用一个TreeSet来存储在下标i之前的k个数
TreeSet<Long> set = new TreeSet<>();
for(int i = 0;i < nums.length;i++){
//取出这k个数中小于等于nums[i]的数中的最大的一个数,当然可能所有的数都大于它所有这个值可能为空
Long low = set.floor((long)nums[i]);
if(low != null && (long)nums[i] - low <= t){
return true;
}
//判断这个数和nums[i]的差如果小于等于t就返回true
//取出这k个数中大于等于nums[i]的数中最小的一个
//如果他和nums[i]的差小于等于t直接返回true
Long big = set.ceiling((long)nums[i]);
if(big != null && big - (long)nums[i] <= t){
return true;
}
//保证set中存储的只有k个数
set.add((long)nums[i]);
if(set.size() > k){
set.remove((long)nums[i - k]);
}
}
//遍历完所有元素之后还每页找出一个符合条件的就直接返回false
return false;
}
}
值和下标只差都在给定范围内
最新推荐文章于 2022-11-22 08:47:44 发布