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/
作者介绍
j
jaryue
V1