目的
旨在记录在Leedcode网上刷题的过程,记录心得。
题目
给定一个整数数组和一个整数 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
思路
把数组元素存到map中,遍历时查看数组元素是不是在<元素,索引>map中,如果已在,则开始判断,符合条件就跳出循环,返回结果。
代码
class Solution {
public:
bool containsNearbyDuplicate(vector<int>& nums, int k) {
int numsize = nums.size();
if(numsize<=1) return false;
int l=0,r=numsize-1;
bool result = false;
map<int,int> numsmap;//<元素,索引>
map<int,int>::const_iterator iter;
numsmap[nums[0]] = 0;
for(int i=1;i<numsize;i++){
iter = numsmap.find(nums[i]);
if(iter!=numsmap.end()){
if((i-iter->second)<=k){
result = true;
break;
}
}
numsmap[nums[i]] = i;
}
return result;
}
};