219. 存在重复元素II
滑动窗口
class Solution {
public boolean containsNearbyDuplicate(int[] nums, int k) {
/**
* 滑动窗口
* i为左指针,right为右指针,当区间长度小于k时且不满足条件,right右移
* 当长度为k还不满足条件,i右移,同时right从i + 1开始
*/
for (int i = 0; i < nums.length; i++) {
int right = i + 1;
while (right - i <= k && right < nums.length){
if (nums[i] == nums[right]){
return true;
}
else {
right++;
}
}
}
return false;
}
}
/**
* 时间复杂度 O(n)
* 空间复杂度 O(1)
*/
优化1——使用集合存储元素,避免重复判断
import java.util.HashSet;
class Solution {
public boolean containsNearbyDuplicate(int[] nums, int k) {
/**
* 滑动窗口
* i为左指针,right为右指针,当区间长度小于k时且不满足条件,right右移
* 当长度为k还不满足条件,i右移,同时right从i + 1开始
* 用set存储元素,当在k的范围内出现重复元素时返回true,否则删除存储的第一个元素
*/
HashSet
https://leetcode-cn.com/problems/contains-duplicate-ii/