g0201_0300.s0220_contains_duplicate_iii.Solution Maven / Gradle / Ivy
Go to download
Show more of this group Show more artifacts with this name
Show all versions of leetcode-in-java21 Show documentation
Show all versions of leetcode-in-java21 Show documentation
Java-based LeetCode algorithm problem solutions, regularly updated
package g0201_0300.s0220_contains_duplicate_iii;
// #Medium #Array #Sorting #Sliding_Window #Ordered_Set #Bucket_Sort
// #2022_07_02_Time_38_ms_(80.90%)_Space_54.1_MB_(52.01%)
import java.util.HashMap;
import java.util.Map;
/**
* 220 - Contains Duplicate III\.
*
* Medium
*
* Given an integer array `nums` and two integers `k` and `t`, return `true` if there are **two distinct indices** `i` and `j` in the array such that `abs(nums[i] - nums[j]) <= t` and `abs(i - j) <= k`.
*
* **Example 1:**
*
* **Input:** nums = [1,2,3,1], k = 3, t = 0
*
* **Output:** true
*
* **Example 2:**
*
* **Input:** nums = [1,0,1,1], k = 1, t = 2
*
* **Output:** true
*
* **Example 3:**
*
* **Input:** nums = [1,5,9,1,5,9], k = 2, t = 3
*
* **Output:** false
*
* **Constraints:**
*
* * 1 <= nums.length <= 2 * 104
* * -231 <= nums[i] <= 231 - 1
* * 0 <= k <= 104
* * 0 <= t <= 231 - 1
**/
public class Solution {
private long getId(long i, long w) {
return i < 0 ? (i + 1) / w - 1 : i / w;
}
public boolean containsNearbyAlmostDuplicate(int[] nums, int k, int t) {
if (t < 0) {
return false;
}
Map d = new HashMap<>();
long w = (long) t + 1;
for (int i = 0; i < nums.length; ++i) {
long m = getId(nums[i], w);
if (d.containsKey(m)) {
return true;
}
if (d.containsKey(m - 1) && Math.abs(nums[i] - d.get(m - 1)) < w) {
return true;
}
if (d.containsKey(m + 1) && Math.abs(nums[i] - d.get(m + 1)) < w) {
return true;
}
d.put(m, (long) nums[i]);
if (i >= k) {
d.remove(getId(nums[i - k], w));
}
}
return false;
}
}
© 2015 - 2025 Weber Informatics LLC | Privacy Policy