给定一个整数数组和一个整数 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,存储键值对
代码题解:
class Solution { public: bool containsNearbyDuplicate(vector<int>& nums, int k) { int n=nums.size(); map<int,int>map1; for(int i=0;i<n;i++) { if(map1.count(nums[i])) { if(i-map1[nums[i]]<=k) return true; else map1[nums[i]]=i; //防止map中存在重复的数值。例如(1,0,1,1),可能在map中第一个1对应着下标0,第三个1插入时i-map1[nums[i]>k,执行map1[nums[i]]=i,即将1的下标由0变为2,下标为0的位置在map1中不存储任何数值 } else map1.insert(map<int,int>::value_type(nums[i],i)); } return false; } };
一开始始终无法理解map1[nums[i]]=i这个地方,后来代入例子进去后发现明白了好多诶!
哈希表第一次真正的接触到,很好用!