220 存在重复元素3-困难
题目:
给定一个数组nums和两个整数k,t。判断是否存在两个不同的下标,使得nums[i]-nums[j] <= t
,同时abs(i-j) <= k
,如果存在返回true,否则返回false。
分析:
滑动窗口,使用双指针控制窗口大小。该算法可行,但是某些测试用例会超时,所以需要寻找其他解法。
// 该算法会超时
func containsNearbyAlmostDuplicate(nums []int, indexDiff int, valueDiff int) bool {
n := len(nums)
left, right := 0, 0
for left < n {
right = left+1
for right - left <= indexDiff && right < n {
if abs(nums[left], nums[right]) <= valueDiff {
return true
}
right++
}
left++
}
return false
}
func abs(x, y int) int {
if x < y {
return y-x
}
return x-y
}
最后更新于