219 存在重复元素2-简单

题目:

给定一个数组nums和整数k,判断是否存在两个不同的下标,使得nums[i] == nums[j],同时abs(i-j) <= k,如果存在返回true,否则返回false。

分析:

推荐该算法,滑动窗口。

这里滑动窗口的技巧在与题目中所要求的abs(i-j) <= k,所以只判断连续的k个元素即可。

// date 2022/09/27
func containsNearbyDuplicate(nums []int, k int) bool {
    size := len(nums)

    start, end := 0, 0

    for start < size {
        end = start+1
        for end - start <= k && end < size {
            if nums[start] == nums[end] {
                return true
            }
            end++
        }
        start++
    }
    
    return false
}

算法2:利用map,保存遍历过的元素

// date 2022/09/27
func containsNearbyDuplicate(nums []int, k int) bool {
  m := make(map[int]int)
  for index, v := range nums {
    if j, ok := m[v]; ok && index - j <= k {
      return true
    }
    m[v] = index
  }
  return false
}

最后更新于