给你一个整数数组 nums
和一个整数 k
,判断数组中是否存在两个 不同的索引 i
和 j
,满足 nums[i] == nums[j]
且 abs(i - j) <= k
。如果存在,返回 true
;否则,返回 false
。
解法:遍历一遍数组就可以,因为要保证abs(i-j)<=k, 且i!=j,那么我们可以用哈希表记录在i之前,每个数出现的最大下标是多少,这样也就不需要abs了,可以保证i>j, 当枚举到nums[i]这个数时,判断一下之前有没有出现过nums[i] 这个数,如果出现过,因为哈希表记录的是上次出现的最大下标,那直接 i-j 判断是不是小于等于k就可以了。
class Solution {
public:
bool containsNearbyDuplicate(vector<int>& nums, int k) {
//i>j i-j<=k j越大越好
unordered_map<int,int>mp;
for(int i=0;i<nums.size();i++)
{
int num = nums[i];
if(mp.count(num)&&i-mp[num]<=k)return true;
mp[num]=i;
}
return false;
}
};