题目:
给你一个整数数组 nums 和一个整数 k ,判断数组中是否存在两个 不同的索引 **i 和 **j ,满足 nums[i] == nums[j] 且 abs(i - j) <= k 。如果存在,返回 true ;否则,返回 false 。
解法:
方法1:暴力法:
func containsNearbyDuplicate(nums []int, k int) bool {
existMap := make(map[int][]int)// val:index
for i := range nums {
if indexs, ok := existMap[nums[i]]; ok {
for j := range indexs {
if abs(i, indexs[j]) <= k {
return true
}
}
existMap[nums[i]] = append(existMap[nums[i]], i)
} else {
existMap[nums[i]] = []int{i}
}
}
return false
}
func abs(a, b int) int{
if a > b {
return a - b
}
return b - a
}
方法二:滑动窗口
func containsNearbyDuplicate(nums []int, k int) bool {
slideMap := make(map[int]bool)
for i := range nums {
if i > k {
delete(slideMap, nums[i - k - 1])
}
if _, ok := slideMap[nums[i]]; ok {
return true
} else {
slideMap[nums[i]] = true
}
}
return false
}