-
Notifications
You must be signed in to change notification settings - Fork 0
Expand file tree
/
Copy pathContainsDuplicateIII.java
More file actions
26 lines (22 loc) · 1.04 KB
/
Copy pathContainsDuplicateIII.java
File metadata and controls
26 lines (22 loc) · 1.04 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
import java.util.TreeSet;
public class ContainsDuplicateIII {
public boolean containsNearbyAlmostDuplicate(int[] nums, int k, int t) {
TreeSet<Long> set = new TreeSet<>();
for(int i = 0; i < nums.length; i++){
if(i > k) set.remove((long)nums[i - k - 1]);
Long ceiling = set.ceiling((long)nums[i]);
Long floor = set.floor((long)nums[i]);
if((ceiling != null && ceiling - nums[i] <= t) || (floor != null && nums[i] - floor <= t)) return true;
set.add((long)nums[i]);
}
return false;
}
public static void main(String[] args) {
ContainsDuplicateIII contains = new ContainsDuplicateIII();
System.out.println(contains.containsNearbyAlmostDuplicate(new int[]{1,2,3,1}, 4, 0));
System.out.println(contains.containsNearbyAlmostDuplicate(new int[]{4,2}, 2, 1));
System.out.println(contains.containsNearbyAlmostDuplicate(new int[]{4,1,6,3}, 100, 1));
System.out.println(contains.containsNearbyAlmostDuplicate(new int[]{1,2}, 0, 1));
System.out.println(contains.containsNearbyAlmostDuplicate(new int[]{0,2147483647}, 1, 2147483647));
}
}