题目分析:我们使用大小不超过k的unorderset来作为滑动窗口,比较窗口內是否有大小相等的元素
c++:
bool containsNearbyDuplicate(vector<int>& nums, int k) {
//hashset<int> s;
unordered_set<int> s;
int len = nums.size();
for(int i = 0; i < len; i++){
if(s.find(nums[i]) != s.end()) //判断s中是否有相等的数
return true;
s.insert(nums[i]); //插入元素
if(s.size() > k) //滑动窗口最大为k
s.erase(nums[i-k]); //删除目前s中的第一个元素
}
return false;
}
Python:
def containsNearbyDuplicate(self, nums: List[int], k: int) -> bool:
s = set()
l = len(nums)
for i in range(0,l):
if nums[i] in s:
return True
s.add(nums[i])
if len(s) > k:
s.discard(nums[i-k])
return False
C++:set ,unorderset 使用注意点:
set s; unorderset s;
s.find(x) 返回的是s中指向x的迭代器,如果s中没有找到x,则指向s.end()
s.end() 返回的是指向最后一个元素后面的迭代器,并不是指向最后一个元素
python3中set是无序的!
具体:https://www.runoob.com/python3/python3-set.html