52 lines
1.6 KiB
Markdown
52 lines
1.6 KiB
Markdown
|
||
## 题目地址
|
||
https://leetcode-cn.com/problems/contains-duplicate-ii/
|
||
|
||
## 思路
|
||
|
||
使用哈希策略,map数据结构来记录数组元素和对应的元素所在下表,看代码,已经详细注释。
|
||
|
||
## C++代码
|
||
|
||
```
|
||
class Solution {
|
||
public:
|
||
bool containsNearbyDuplicate(vector<int>& nums, int k) {
|
||
unordered_map<int, int> map; // key: 数组元素, value:元素所在下表
|
||
for (int i = 0; i < nums.size(); i++) {
|
||
// 找到了在索引i之前就出现过nums[i]这个元素
|
||
if (map.find(nums[i]) != map.end()) {
|
||
int distance = i - map[nums[i]];
|
||
if (distance <= k) {
|
||
return true;
|
||
}
|
||
map[nums[i]] = i; // 更新元素nums[i]所在的最新位置i
|
||
} else { // 如果map里面没有,就把插入一条数据<元素,元素所在的下表>
|
||
map[nums[i]] = i;
|
||
}
|
||
}
|
||
return false;
|
||
}
|
||
};
|
||
```
|
||
|
||
代码精简之后
|
||
|
||
```
|
||
class Solution {
|
||
public:
|
||
bool containsNearbyDuplicate(vector<int>& nums, int k) {
|
||
unordered_map<int, int> map;
|
||
for (int i = 0; i < nums.size(); i++) {
|
||
if (map.find(nums[i]) != map.end() && i - map[nums[i]] <= k) return true;
|
||
map[nums[i]] = i;
|
||
}
|
||
return false;
|
||
}
|
||
};
|
||
```
|
||
|
||
|
||
> 更过算法干货文章持续更新,可以微信搜索「代码随想录」第一时间围观,关注后,回复「Java」「C++」 「python」「简历模板」「数据结构与算法」等等,就可以获得我多年整理的学习资料。
|
||
|