mobile wallpaper 1
mobile wallpaper 2
mobile wallpaper 3
mobile wallpaper 4
213 字
1 分钟
LeetCode 面试经典150题 [45/150 存在重复元素II]
2024-06-26

题目描述#

给你一个整数数组 nums 和一个整数 k ,判断数组中是否存在两个 不同的索引 i 和 j ,满足 nums[i] == nums[j] 且 abs(i - j) <= k 。如果存在,返回 true ;否则,返回 false 示例 1:

输入:nums = [1,2,3,1], k = 3
输出:true

示例 2:

输入:nums = [1,0,1,1], k = 1
输出:true

个人C++解答#

刚一看到这道题就应该想到是滑动窗口,且是固定窗口大小的滑动窗口,由于找重复值,可以考虑用哈希表,将窗口模拟为哈希表,当窗口大小小于K时,窗口增加,当窗口到达大小时,通过减小首个进入窗口的值去缩小窗口,可以通过在nums数组中该值的下标来找到这个值,代码中以right表示窗口右侧。

class Solution {
public:
bool containsNearbyDuplicate(vector<int>& nums, int k) {
unordered_map<int, int> HashMap;
int right = 0;
for (; right < nums.size(); ++right) {
if (HashMap.count(nums[right])) {
return true;
}
HashMap[nums[right]]++;
if (HashMap.size() > k) {
HashMap.erase(nums[right - k]);
}
}
return false;
}
};
分享

如果这篇文章对你有帮助,欢迎分享给更多人!

LeetCode 面试经典150题 [45/150 存在重复元素II]
https://ericonline.cn/posts/leetcode-面试经典150题-45-150-存在重复元素ii/
作者
Eric
发布于
2024-06-26
许可协议
CC BY-NC-SA 4.0

部分信息可能已经过时

目录