力扣链接: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
}
**粗体** _斜体_ [链接](http://example.com) `代码` - 列表 > 引用
。你还可以使用@
来通知其他用户。