给定一个整数数组和一个整数 k,判断数组中是否存在两个不同的索引 i 和 j,使得 nums [i] = nums [j],并且 i 和 j 的差的绝对值最大为 k。
示例 1:
输入: [1,2,3,1], k = 3 输出: true
示例 2:
输入: [1,0,1,1], k = 1 输出: true
示例 3:
输入: [1,2,1], k = 0 输出: false
一道easy题,不难,主要是考察渣渣对哈希表是不是熟悉,刚开始皮了一下,用了一个n^2复杂度的方法直接遍历,结果是肯定的,超时反馈。
因为,然后看提示,嗯,原来发现哈希这么管用,果断采用,细节见代码:
class Solution {
public:
bool containsNearbyDuplicate(vector<int>& nums, int k) {
if (k <= 0 || nums.size() <= 1)
{
return false;
}
unordered_map<int, int> cmp;
for (int i = 0; i < nums.size(); i++)
{
if (cmp.find(nums[i]) == cmp.end())
{
cmp.insert({nums[i], i});
}
else
{
if (i - cmp[nums[i]] <= k)
{
return true;
}
else
{
cmp[nums[i]] = i;
}
}
}
return false;
}
};