最基本的思路 时间上消耗有点高
func containsNearbyAlmostDuplicate(_ nums: [Int], _ k: Int, _ t: Int) -> Bool {
let count = nums.count
if count == 0 {
return false
}
for i in 0..<count-1 {
for j in i+1..<count {
if abs(nums[i] - nums[j]) <= t {
if abs(i - j) <= k {
return true
}
}
}
}
return false
}
判断条件上可以优化下 因为题目说下标i和j是不同的。所以k不会为0
if count <2 || k == 0 {
return false
}
又因为i-j的绝对值小于等于k。内层循环上可以优化和过滤一部分
又因为j是从i+1开始的。 可以省略一个abs函数调用
但是时间上还是消耗还是很高
func containsNearbyAlmostDuplicate(_ nums: [Int], _ k: Int, _ t: Int) -> Bool {
if k == 0 {
return false
}
let count = nums.count
if count < 2 {
return false
}
for i in 0..<count-1 {
for j in i+1..<count {
if j - i <= k {
if abs(nums[i] - nums[j]) <= t {
return true
}
}
}
}
return false
}
网友评论