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 difference between i and j is at most k.
C 版本
bool containsNearbyDuplicate(int* nums, int numsSize, int k) {
for (int i = 0; i < numsSize; ++i)
{
for (int j = i + 1; j <= i + k; ++j) {
if (j >= numsSize) break;
if (nums[i] == nums[j]) return true;
}
}
return false;
}
C++,可以用map查找
class Solution {
public:
bool containsNearbyDuplicate(vector<int>& nums, int k) {
unordered_map<int, int> mp;
int len = nums.size();
for (int i = 0; i < len; ++i)
{
if (mp.find(nums[i]) != mp.end() && i - mp[nums[i]] <= k) return true;
mp[nums[i]] = i;
}
return false;
}
};