🌗 219. 存在重复元素 II
2022年10月10日
- algorithm
🌗 219. 存在重复元素 II
难度: 🌗
问题描述
解法 1 - HashMap
class Solution {
public boolean containsNearbyDuplicate(int[] nums, int k) {
// 思路:
// 一次遍历 - map 存放 值 - 下标
int len = nums.length;
HashMap<Integer, Integer> map = new HashMap<>();
for(int i = 0; i < len; i ++) {
if(!map.containsKey(nums[i])) {
map.put(nums[i], i);
} else {
int prev = map.get(nums[i]);
if(i - prev <= k) {
return true;
} else {
map.put(nums[i], i);
}
}
}
return false;
}
}
输出 1
解法 2 - 滑动窗口 + HashSet
class Solution {
public boolean containsNearbyDuplicate(int[] nums, int k) {
// 思路:
// 滑动窗口,窗口大小为 k,只要窗口中存在 2 个相同元素,则说明满足条件
// set 存放滑动窗口内的值
if(k == 0) {
return false;
}
int len = nums.length;
if(len < 2) {
return false;
}
HashSet<Integer> set = new HashSet<>();
for(int i = 0; i < Math.min(len, k + 1); i ++) {
if(set.contains(nums[i])) {
return true;
}
set.add(nums[i]);
}
// 滑动
for(int i = k + 1; i < len; i ++) {
set.remove(nums[i - k - 1]);
if(set.contains(nums[i])) {
return true;
} else {
set.add(nums[i]);
}
}
return false;
}
}