放假了,好久没有刷力扣了
这一道题使用了哈希表解决,首先考虑将每个相同数的下标值存在哈希表中,当后面出现与当前下标值相等的数时,判断是否下标值的差小于等k如果大于则将此下标值存在哈希表中(因为肯定越往后的下标值之间的差值越小,则前面的省去)。如果结束循环还没有找到,则返回false。
代码如下
bool containsNearbyDuplicate(vector<int>& nums, int k) {
unordered_map<int,int> documentory;
for(int i = 1;i <= nums.size();i++){
if(documentory[nums[i-1]] != 0 && i - documentory[nums[i-1]] <= k){
return true;
}
else{
documentory[nums[i-1]] = i;
}
}
return false;
}