class Solution {
public:
bool containsNearbyDuplicate(vector<int>& nums, int k) {
/*
if(nums.size()<=1||k<=0)
return false;
if(k>=nums.size())
k=nums.size()-1;
for(int i=1;i<=k;i++)
{
for(int front=0,last=i;last<nums.size();front++,last++)
{
if(nums[front]==nums[last])
return true;
}
}
return false;
*/
/*
for(int i=0;i<nums.size();i++)
{
int temp1=i+k;
int temp2=nums.size()-1;
int minS=min(temp1,temp2);
for(int j=i+1;j<=minS;j++)
{
if(nums[i]==nums[j])
{
return true;
}
}
}
return false;
*/
unordered_map<int,int> m;
for(int i=0;i<nums.size();i++)
{
if(m.count(nums[i]))
{
if(i-m[nums[i]]<=k)
return true;
else
m[nums[i]]=i;
}
else
m[nums[i]]=i;
}
return false;
}
};
三种方法,前两种速度太慢了,压力测试过不了,最后使用了C++的STL库,看来C++的知识很重要!!!!
unordered_map是用hash实现的,查询速度在常量级别,所以整个算法在线性时间完成。
map类是用红黑树实现的,查询速度理论上慢一点。