判断是否存在重复元素
给定一个整数数组和一个整数k,判断数组中是否存在两个不同的索引i和j,使得nums[i] = nums[j],并且i和j的差的绝对值至多为k。
示例1:
输入:nums = [1,2,3,1] , k = 3
输出: true
示例2:
输入:nums = [1,0,1,1] , k = 1
输出: true
示例3:
输入:nums = [1,2,3,1,2,3] , k = 2
输出: false
程序如下:
#include <bits/stdc++.h>
using namespace std;
class Solution
{
public:
bool containsNearbyDuplicate(vector<int> &nums, int k)
{
int n = nums.size(), idx = 0;
unordered_map<int, int> nmap;
for(int i=0; i<n; ++i)
{
auto iter = nmap.find(nums[i]);
if(iter != nmap.end())
{
if(i - iter->second <= k)
return true;
else
iter->second = i;
}
else
nmap[nums[i]]=i;
}
return false;
}
};
vector<int> nums = {1,2,3,1,2,3};
int main()
{
Solution sol;
bool result = sol.containsNearbyDuplicate(nums, 2);
cout<< "result is " << result << endl;
return 0;
}
$ g++ -o test test.cpp
$ ./test
result is 0
这里主要使用unordered_map,实现了元素的快速查找。