思路:
滑动窗口大小为k(用start,end指向),如果这之间找到相同的元素,直接返回;否则,放到set中,如果再往set中加一个元素,set大小就要超过k的话,将start指向的元素从set中删除,start前移。
28ms,时间复杂度:O(N),空间复杂度:O(N)
class Solution {
public:
bool containsNearbyDuplicate(vector<int>& nums, int k) {
int start = 0, end = 0;
unordered_set<int> s;
for(int i = 0; i < nums.size(); ++i) {
if(s.find(nums[i]) != s.end()) {
return true;
}else {
s.insert(nums[i]);
}
if(end - start == k) {
s.erase(nums[start++]);
}
end++;
}
return false;
}
};