题目大意:给出一个数组,一个数K,判断该数组中是否存两个索引使得nums[i]==nums[j]且|i-j|<=k.
算法思想:
1.设置一个map容器,键值为数组中的元素值,实值为元素值对应的索引编号。
2.遍历数组,将每个元素值插入map中,如果插入成功则说明没出现相等元素,如果插入失败则说明出现相同元素。此时判断索引之差是否小于等于K,若果满足条件返回true,否则更新索引值。
3.遍历完数组后,返回false.
代码如下:
class Solution {
public:
bool containsNearbyDuplicate(vector<int>& nums, int k) {
if (nums.size() < 2) return false;
map<int, int> val;
for (int i = 0; i < nums.size();++i){
if (val.insert(make_pair(nums[i], i)).second == false)
{
if (i - val[nums[i]]<= k) return true;
else val[nums[i]] = i;
}
}
return false;
}
};