给定一个整数数组和一个整数 k,判断数组中是否存在两个不同的索引 i 和 j,使得 nums [i] = nums [j],并且 i 和 j 的差的 绝对值 至多为 k。
示例 1:
输入: nums = [1,2,3,1], k = 3
输出: true
思路:
题目有所限制,不但要找到重复元素,并且两个元素的索引值的绝对值不超过k。考虑使用哈希表,首先将判断中组的元素是否在哈希表中,若存在。判断当前元素索引减去前一个重复元素的索引是否为满足绝对值小于k。不满足更新该元素的索引。表中不存在该元素,放入表中。例题所示对应的为{1-0},{2-1},{3-2},遇到重复的1对应索引为3,判断3-0是否小于等于3.满足返回true。
class Solution {
public:
bool containsNearbyDuplicate(vector<int>& nums, int k) {
int size=nums.size();
unordered_map<int,int> map;
for(int i=0;i<size;++i){
auto iter=map.find(nums[i]);
if(iter!=map.end()){
if(i-iter->second<=k) //判断已存在
return true;
else
iter->second=i;
}
map[nums[i]]=i;
}
return false;
}
};