题目分析:我们使用大小不超过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

本文深入探讨了滑动窗口算法的应用,特别是在查找数组或列表中是否存在距离不超过k的重复元素问题上。通过C++和Python代码示例,详细解释了如何使用大小受限的集合作为滑动窗口进行高效检测。
1万+

被折叠的 条评论
为什么被折叠?



