j

jaryue

V1

2023/03/16阅读:13主题:默认主题

leec存在重复元素II

题目描述

给你一个整数数组 nums 和一个整数 k ,判断数组中是否存在两个 不同的索引 i 和 j ,满足 nums[i] == nums[j] 且 abs(i - j) <= k 。如果存在,返回 true ;否则,返回 false 。

来源:力扣(LeetCode) 链接:https://leetcode.cn/problems/contains-duplicate-ii 著作权归领扣网络所有。商业转载请联系官方授权,非商业转载请注明出处。

解题思路

题目理解:查找k范围内是否存在重复数 方法1 所以查找范围必须在k以内,可以使用循环遍历的方法来解 定义一个i,j循环条件i<k,每循环一次j++直到遍历完整个数组 方法2 hash表

代码示例

法1

func containsNearbyDuplicate(nums []int, k int) bool {
 if k >= len(nums) {
  k = len(nums) - 1
 }
 for j := 0; j < len(nums)-k; j++ {
  for i := 1; i <= k; i++ {
   if nums[j] == nums[j+i] {
    return true
   } 
  }
        if k > 0 && len(nums)-j-k-1 == 0 {
    k--
   }
 }
 return false
}

法2

func containsNearbyDuplicate2(nums []int, k int) bool {
 m := make(map[int]int)
 for i, _ := range nums {
  if m[nums[i]] == 0 {
   m[nums[i]] = 1
   if i >= k {
    delete(m, nums[i-k])
   }
  } else {
   return true
  }
 }
 return false
}

执行结果

法2

更多

更多解决方法请参考: https://leetcode.cn/problems/contains-duplicate-ii/solution/

分类:

后端

标签:

Golang

作者介绍

j
jaryue
V1