原题
给定一个整数数组和一个整数 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
解法
思想
哈希表,将元素和最后出现的下标对应起来,后面遍历到相同元素时看下标之差是否小于等于k
代码
class Solution {
public boolean containsNearbyDuplicate(int[] nums, int k) {
Map<Integer,Integer> map = new HashMap<>();
for(int i = 0;i<nums.length;i++){
if(map.containsKey(nums[i])){
if(i-map.get(nums[i])<=k) return true;
}
map.put(nums[i],i);
}
return false;
}
}
func containsNearbyDuplicate(nums []int, k int) bool {
lastIndex := map[int]int{}
for index, num := range nums{
if li, ok := lastIndex[num]; ok{
if index - li <= k{
return true
}
}
lastIndex[num] = index
}
return false
}
原创文章,作者:彭晨涛,如若转载,请注明出处:https://www.codetool.top/article/leetcode219-%e5%ad%98%e5%9c%a8%e9%87%8d%e5%a4%8d%e5%85%83%e7%b4%a0ii/