力扣链接: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}