1. Problem Description(219)
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.
判断数组是否满足存在两个数字相等而且他们的indice之差小于等于k。
2. My solution
用map,存储每个出现的数字的位置,一旦出现重复数字即判断和之前的数字距离之差是否满足题意。距离之差不满足即更新hash值为新的位置。
class Solution
{
public:
bool containsNearbyDuplicate(vector<int>& nums, int k)
{
int len=nums.size();
map<int,int>hh;
for(int i=0; i<len; i++)
{
if(hh[nums[i]]==0)
hh[nums[i]]=i+1;
else
{
int abs=hh[nums[i]]-(i+1);
abs=abs>0?abs:(-abs);
if(abs<=k)
return true;
else
hh[nums[i]]=i+1;//因为要使得indice差最小,直接把他赋值为偏后面的的indice
}
}
return false;
}
};
3.No.217 Contains Duplicate(Map)
只需要判断是否出现重复数字。
class Solution
{
public:
bool containsDuplicate(vector<int>& nums)
{
int len=nums.size();
map<int,int>hh;
for(int i=0; i<len; i++)
{
if(hh[nums[i]]==0)
hh[nums[i]]=i+1;
else
{
return true;
}
}
return false;
}
};