Question:
Given an array of integers and an integer k, find out whether there are two distinct indices i and j in the array such that nums[i] = nums[j] and the difference between i and j is at most k.
分析:
只要有一对满足条件即可。
可以用hashmap来实现。
其中unordered_map :
<span style="font-size:14px;background-color: rgb(153, 255, 255);">template<class Key,
class Ty,
class Hash = std::hash<Key>,
class Pred = std::equal_to<Key>,
class Alloc = std::allocator<std::pair<const Key, Ty> > >
class unordered_map;</span>参数 说明
Key 键类型。
Ty 映射类型。
Hash 哈希函数对象类型。
Pred 相等比较函数对象类型。
Alloc 分配器类。
哈希map是一种关联容器,通过键值和映射值存储元素。允许根据键值快速检索各个元素。
在unordered_map中,键值一般用来唯一标识元素,而对应的值是一个对象关联到这个键的内容。键映射值的类型可能会有所不同。
在内部unordered_map的元素不以键值或映射的元素作任何特定的顺序排序,其存储位置取决于哈希值允许直接通过其键值为快速访问单个元素(具有恒定平均的平均时间复杂度)。
unordered_map容器比map容器更快地通过键值访问他们的单个元素,虽然unordered_map一般都是比map通过其元素的一个子集范围迭代效率低。
哈希map允许使用操作运算符(运算符[])以其键值作为参数直接访问元素。
代码:
class Solution {
public:
bool containsNearbyDuplicate(vector<int>& nums, int k) {
unordered_map<int, int> m;
for (int i = 0; i < nums.size(); ++i) {
if (m.find(nums[i]) != m.end() && i - m[nums[i]] <= k) return true;
else m[nums[i]] = i;
}
return false;
}
};
寻找相近重复元素

本文介绍了一种利用哈希表解决数组中寻找是否存在两个不同索引的元素值相同且索引差不超过k的问题的方法。通过使用C++的unordered_map,可以在O(n)的时间复杂度内完成该任务。
133

被折叠的 条评论
为什么被折叠?



