问题描述
给定一个整数二维数组,以及整数 k 和 t,要求判断数组中是否存在两个元素下标 i 和 j,使得 abs(i - j) <= k 并且 abs(nums[i] - nums[j]) <= t,如果存在则返回 true, 否则返回 false。题目链接:**点我**
样例输入输出
输入:nums = [1,2,3,1], k = 3, t = 0
输出:true
输入:nums = [1,5,9,1,5,9], k = 2, t = 3
输出:false
问题解法
用一个容量为 k 的 TreeSet 来存储数组的元素,遍历数组元素,对于每个元素,判断 TreeSet 中是否存在 [num - t, num + t] 中的元素,如果存在,则说明存在重复元素,否则不存在重复元素。为了快速判断 [num - t, num + t] 区间的元素是否在 TreeSet 中,可以使用 ceiling 函数获取 num - t 的值,然后与 num + t 进行比较。需要额外注意的时,运算过程中需要用 long 类型,否则两个数字相加可能超出范围。代码如下
1 | class Solution |