【C++算法】59.哈希表_存在重复元素 II
文章目录
- 题目链接:
- 题目描述:
- 解法
- C++ 算法代码:
- 图解
题目链接:
219. 存在重复元素 II
题目描述:
解法
哈希表
C++ 算法代码:
class Solution
{
public:bool containsNearbyDuplicate(vector<int>& nums, int k) {// 创建一个无序映射(哈希表),用于存储每个元素及其最新出现的索引// 键(key):数组元素的值// 值(value):该元素在数组中最近一次出现的索引位置unordered_map<int, int> hash;// 遍历数组中的每一个元素for(int i = 0; i < nums.size(); i++){// 检查当前元素是否已经在哈希表中出现过if(hash.count(nums[i])){// 如果元素已存在,计算当前索引与上次出现索引的差值// 如果差值小于等于k,表示找到了满足条件的重复元素if(i - hash[nums[i]] <= k) return true;}// 无论元素是否重复,都更新哈希表中该元素的最新索引// 如果是新元素,这一步将其添加到哈希表中// 如果是已存在的元素,这一步将更新其索引为当前位置hash[nums[i]] = i;}// 如果遍历完整个数组都没有找到满足条件的重复元素,返回falsereturn false;}
};
图解
例如:nums = [1,0,1,1], k = 1
处理 nums[0] = 1
检查:
hash.count(1)
返回0
(元素1
不存在于哈希表中)插入:
hash[1] = 0
(将元素1
的索引0
存入哈希表)哈希表现在:
hash = {1:0}
处理 nums[1] = 0
检查:
hash.count(0)
返回0
(元素0
不存在于哈希表中)插入:
hash[0] = 1
(将元素0
的索引1
存入哈希表)哈希表现在:
hash = {1:0, 0:1}
处理 nums[2] = 1
检查:
hash.count(1)
返回1
(元素1
存在于哈希表中)访问:
hash[1]
返回0
(获取元素1
的索引,为0
)计算:
i - hash[nums[i]] = 2 - 0 = 2
判断:
2 <= 1
为假,不满足条件更新:
hash[1] = 2
(更新元素1
的索引为当前位置2
)哈希表现在:
hash = {1:2, 0:1}
处理 nums[3] = 1
检查:
hash.count(1)
返回1
(元素1
存在于哈希表中)访问:
hash[1]
返回2
(获取元素1
的索引,为2
)计算:
i - hash[nums[i]] = 3 - 2 = 1
判断:
1 <= 1
为真,满足条件返回:
true