219_简单_存在重复元素2
219 存在重复元素II 简单
https://leetcode.cn/problems/contains-duplicate-ii/
算法1:利用map保存索引
// data 2020/01/01
// map
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
}
// date 2022/09/07
// 优化版本:只保留需要个数的索引
func containsNearbyDuplicate(nums []int, k int) bool {
set := make(map[int]int, k)
for idx, v := range nums {
if o, ok := set[v]; ok && idx - o <= k {
return true
}
set[v] = idx
if idx >= k {
delete(set, nums[idx-k])
}
}
return false
}
算法2:双指针
// data 2020/02/02
// two points
func containNearbyDuplicate(nums []int, k int) bool {
i, j, n := 0, 0, len(nums)
for i < n {
j = i + 1
for j - i <= k && j < n{
if nums[i] == nums[j] {return true}
j++
}
i++
}
return false
}
算法3:滑动窗口
func containsNearbyDuplicate(nums []int, k int) bool {
queue := make([]int, 0, k)
for _, v := range nums {
if checkQueue(queue, v) {
return true
}
queue = append(queue, v)
if len(queue) > k {
queue = queue[1:]
}
}
return false
}
func checkQueue(nums []int, n int) bool {
for _, v := range nums {
if v == n {
return true
}
}
return false
}
最后更新于