[leetcode] problem 220 – contains duplicate iii

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.

Example

No.1

Input: nums = [1,2,3,1], k = 3, t = 0

Output: true

No.2

Input: nums = [1,0,1,1], k = 1, t = 2

Output: true

No.3

Input: nums = [1,5,9,1,5,9], k = 2, t = 3

Output: false

Code

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
public boolean (int[] nums, int k, int t) {
TreeSet<Integer> set = new TreeSet<>();

for (int i = 0; i < nums.length; i++) {
if (i > k)
set.remove(nums[i - k - 1]);

Integer floor = set.floor(nums[i]);
Integer ceiling = set.ceiling(nums[i]);

if (floor != null && (long) nums[i] - (long) floor <= t)
return true;

if (ceiling != null && (long) ceiling - (long) nums[i] <= t)
return true;

set.add(nums[i]);
}

return false;
}