暴力解法
class Solution {
public boolean containsNearbyDuplicate(int[] nums, int k) {
for (int i = 0; i < nums.length; i++) {
for (int j = i + 1; j < nums.length && j - i <= k; j++) {
if (nums[i] == nums[j]){
return true;
}
}
}
return false;
}
}
/**
* 时间复杂度 O(nk)
* 空间复杂度 O(1)
*/
哈希表
import java.util.HashSet;
class Solution {
public boolean containsNearbyDuplicate(int[] nums, int k) {
/**
* 滑动窗口
* 用set存储元素,最多存储k个元素,当在k的范围内出现重复元素时返回true,否则删除存储的第一个元素才能继续存储
*/
HashSet<Object> set = new HashSet<>();
for (int i = 0; i < nums.length; i++) {
if (set.contains(nums[i])){
return true;
}
set.add(nums[i]);
if (set.size() > k){
set.remove(nums[i - k]);
}
}
return false;
}
}
/**
* 时间复杂度 O(n)
* 空间复杂度 O(1)
*/
https://leetcode-cn.com/problems/contains-duplicate-ii/