题目
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 absolute difference between i and j is at most k.
翻译
假设给定一个整数数组,和一个数k。找出是否两个不同位置处数值相等。且两者距离至多为k。
思路
题目本质是求,在不同位置是否存在相等的数。然后又加了一个限制条件,是否位置距离小于等于k。等于多加一个判断即可。
代码
class Solution {
public:
bool containsNearbyDuplicate(vector<int>& nums, int k) {
//本质还是找相同的数,但是需要知道位置,然后计算i,j之差不大于k
map<int,int> dup_pos;
int hasDup = false;
for(int i = 0; i < nums.size(); ++i){
//之前已经出现了一次的。
if(dup_pos.count(nums[i]) > 0){
//计算是否小于等于k
//cout << dup_pos[nums[i]] <<endl;
if(i - dup_pos[nums[i]] <= k){
return true;
}
}
dup_pos[nums[i]] = i;
}
return false;
}
};