【題目描述】
給定一個(gè)整數(shù)數(shù)組和一個(gè)整數(shù) k,判斷數(shù)組中是否存在兩個(gè)不同的索引 i 和 j,使得 nums [i] = nums [j],并且 i 和 j 的差的絕對(duì)值最大為 k。
【示例1】
輸入: nums = [1,2,3,1], k = 3
輸出: true
【示例2】
輸入: nums = [1,0,1,1], k = 1
輸出: true
【示例3】
輸入: nums = [1,2,3,1,2,3], k = 2
輸出: false
【思路1】
1、暴力解
2、分別判斷兩個(gè)值是否相等且 index絕對(duì)值 <= k
3、時(shí)間復(fù)雜度O(n^2)
4、代碼略
【思路2】
1、使用哈希表 [value:index]
2、把數(shù)值當(dāng)做key,index當(dāng)做value
3、遍歷數(shù)組,當(dāng)map[n]有值時(shí),判斷abs(map[n]-cur) <= k
4、時(shí)間復(fù)雜度O(n)
5、空間復(fù)雜度O(n)
Swift代碼實(shí)現(xiàn):
func containsNearbyDuplicate(_ nums: [Int], _ k: Int) -> Bool {
var map = [Int:Int]()
for (i,n) in nums.enumerated() {
if let tmp = map[n] {
if abs(tmp-i) <= k {
return true
}
}
map[n] = i
}
return false
}