Leetcode专题[数组]-219-存在重复元素II

力扣链接:https://leetcode-cn.com/probl...
解题思路:

  1. 首先结合题干分析清楚题目的意思,给定一个数组nums和一个数字k,是否存在下标i,j使得两个不同的下标在相差不超过k的时候想等
  2. 根据上面提取出来的意思,可以将问题转换为,在一个长度为K+1(i-j<=k,那么算上i本身,滑动窗口最大的长度为k+1)的窗口中寻找是否存在两个相同的数字,这个时候,解决问题的模型已经建立
  3. 有窗口的上限,那么就需要在达到上限时舍弃元素,这个时候就把窗口的最左边元素舍弃,下标为i-k-1(i-k为滑动窗口内的第一个元素,需要舍弃的需要再减一)
  4. 最后一个问题,如何标记元素已经出现过呢?在解决数组问题时,我们经常借助哈希表来进行标记位的存储
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
}

你可能感兴趣的:(golang)