力扣链接:https://leetcode-cn.com/probl…
解题思路:
- 首先联合题干剖析分明题目的意思,给定一个数组 nums 和一个数字 k,是否存在下标 i,j 使得两个不同的下标在相差不超过 k 的时候想等
- 依据下面提取进去的意思,能够将问题转换为,在一个长度为 K +1(i-j<=k,那么算上 i 自身,滑动窗口最大的长度为 k +1) 的窗口中寻找是否存在两个雷同的数字,这个时候,解决问题的模型曾经建设
- 有窗口的下限,那么就须要在达到下限时舍弃元素,这个时候就把窗口的最右边元素舍弃,下标为 i -k-1(i- k 为滑动窗口内的第一个元素,须要舍弃的须要再减一)
- 最初一个问题,如何标记元素曾经呈现过呢?在解决数组问题时,咱们常常借助哈希表来进行标记位的存储
func containsNearbyDuplicate(nums []int, k int) bool {numsToFlag := map[int]bool{}
for i := 0; i < len(nums); i++ {
if i > k {numsToFlag[nums[i-k-1]] = false
}
if numsToFlag[nums[i]] {return true}
numsToFlag[nums[i]] = true
}
return false
}