Leetcode滑窗系列(java):219. 存在重复元素 II(新手小白仅供参考)
题目来源
题目描述
个人思路
创建两个指针left和right,先将right往右移动,遍历数组,将遍历的数以key值,遍历到的次数以value值放入window哈希表中,当某个key的value值出现两次说明,已经查询到了一对重复的数字,记录下此时的right值。这时移动left指针向右,每遍历到一个key,value减少1,直到没有value为2,即找到了重复的数的第一个数的索引。然后判断两者之差与k的关系即可
代码
class Solution {
public boolean containsNearbyDuplicate(int[] nums, int k) {
Map<Integer,Integer> window = new HashMap<>();
int left = 0;
int right = 0;
int start =0;
int len = Integer.MAX_VALUE;
while(right < nums.length){
int a = nums[right];
right++;
window.put(a,window.getOrDefault(a,0)+1);
while(window.get(a)==2){
if (right - left < len) {
start = left;
len = right - left;
}
int d = nums[left];
left++;
window.put(d,window.get(d)-1);
}
}
return (len-1) <= k ? true : false;
}
}