【存在重复元素II】
思路
核心思路:使用哈希表记录每个数字最近出现的索引
- 遍历数组:逐个处理每个元素
- 检查条件:如果当前数字之前出现过,且索引差 ≤ k,返回 true
- 更新记录:无论是否找到,都更新该数字的最新索引位置
- 遍历完成:如果没有找到满足条件的配对,返回 false
代码实现分析
class Solution {
public:bool containsNearbyDuplicate(vector<int>& nums, int k) {unordered_map<int, int> mp; // 存储数字和最近出现的索引int n = nums.size();for (int i = 0; i < n; i++) {int num = nums[i];// 检查条件:数字出现过且索引差 ≤ kif (mp.count(num) && i - mp[num] <= k) {return true;}// 更新该数字的最新索引位置mp[num] = i;}return false;}
};
思路
1. 哈希表初始化
unordered_map<int, int> mp;
- 键(key):数组中的数字
- 值(value):该数字最近出现的索引位置
2. 遍历和处理逻辑
for (int i = 0; i < n; i++) {int num = nums[i];// 检查是否满足条件if (mp.count(num) && i - mp[num] <= k) {return true;}// 更新索引位置mp[num] = i;
}