题目:
Given an array of integers, find out whether there are two distinct indices i and j in the array such that the absolute difference between nums[i]and nums[j] is at most t and the absolute difference between i and j is at most k.
给出一个整形数组nums,是否存在索引i和j,使得nums[i],nums[j]之间的差不超过给定的整数值t,且i和j之间的差不超过k。
思路:
参照219题,另需注意:1.判断t的取值,不允许<0;2.nums[j]的取值范围为nums[i] - t ~nums[i] + t;可以利用SortedSet中的subSet方法。
程序:
class Solution {
public boolean containsNearbyAlmostDuplicate(int[] nums, int k, int t) {
TreeSet <Long>record = new TreeSet<Long>();
SortedSet <Long>sort = new TreeSet<Long>();
if(t < 0)
return false;
for(int i = 0; i < nums.length; i++){
sort = record.subSet((long)nums[i]-(long)t, (long)nums[i]+(long)t+(long)1);
if(!sort.isEmpty())
return true;
record.add((long)nums[i]);
if(record.size() >= k+1 )
record.remove((long)nums[i-k]);
}
return false;
}
}