哈希表
- 思路:
- 哈希表,存储数组元素及其下标;
- 遍历数组,查找数组元素是否存在,如果存在判断是否符合条件;
class Solution {
public:
bool containsNearbyDuplicate(vector<int>& nums, int k) {
std::unordered_map<int, int> hashtable;
for (int idx = 0; idx < nums.size(); ++idx) {
auto it = hashtable.find(nums[idx]);
if (it != hashtable.end()) {
if (idx - it->second <= k) {
return true;
}
}
hashtable[nums[idx]] = idx;
}
return false;
}
};
滑动窗口
- 思路:
- 长度 k 的窗口,依次向后滑动,判断窗口内是否有重复元素;
- 判断重复元素可以使用 set;
class Solution {
public:
bool containsNearbyDuplicate(vector<int>& nums, int k) {
std::unordered_set<int> windows;
for (int idx = 0; idx < nums.size(); ++idx) {
if (idx > k) {
windows.erase(nums[idx - k -1]);
}
if (windows.count(nums[idx])) {
return true;
}
windows.emplace(nums[idx]);
}
return false;
}
};