本题题目要求如下:
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保存,key为nums的值,value为nums的index。遍历,每次插入前都搜索key,如果该key是空的,则正常插入,如果里面已经有了元素,则保存的是与插入值值相等的前面最近的index,如果插入的值的index和之前的index差小于k,则直接返回正确。否则,用新的index替换老的index。。。
代码如下:
class Solution {
public:
bool containsNearbyDuplicate(vector<int>& nums, int k) {
unordered_map<int, int> hashmap;
for (int i = 0; i < nums.size(); ++i) {
if (hashmap.find(nums[i]) != hashmap.end()) {
if (i - hashmap[nums[i]] <= k) {
return true;
}
}
hashmap[nums[i]] = i;
}
return false;
}
};