給定乙個整數陣列和乙個整數 k,判斷陣列中是否存在兩個不同的索引 i 和 j,使得 nums [i] = nums [j],並且 i 和 j 的差的 絕對值 至多為 k。
示例 1:題目可以這樣表述(給定乙個整數陣列和乙個整數 k,判斷陣列中是否存在兩個相同的值,它們的索引值的差值小於k)輸入:nums = [1,2,3,1], k = 3
輸出:true
因為給與的陣列是無序的且根據題目要求不能改變順序,所以二分搜尋不能使用。
根據題意,可以規定i
&j−i i&j−i < k,維護乙個滑動視窗,需要遍歷長度為n的陣列巢狀長度為k的視窗。 solution :def containsnearbyduplicate (self, nums: list[ int] , k: int) -> bool : n= len(nums) for i in range (n): if nums[i] in nums[i+1: min(n,i+k+1) ]:return true return false但是這種方法時間超限,大約時間複雜度為o(nm),題目要的是線性時間。可想到雜湊表的雜湊表,所以使用雜湊。class
class
solution
:def
containsnearbyduplicate
(self, nums: list[
int]
, k:
int)
->
bool
: dic =
for i in
range
(len
(nums)):
if nums[i]
in dic and i - dic[nums[i]
]<= k:
return
true
dic[nums[i]
]= i
return
false
219 存在重複元素 II
219.存在重複元素 ii 給定乙個整數陣列和乙個整數 k,判斷陣列中是否存在兩個不同的索引i 和j,使得nums i nums j 並且 i 和 j 的差的絕對值最大為 k。示例 1 輸入 nums 1,2,3,1 k 3 輸出 true 示例 2 輸入 nums 1,0,1,1 k 1 輸出 t...
219 存在重複元素 II
鏈結 給定乙個整數陣列和乙個整數 k,判斷陣列中是否存在兩個不同的索引 i 和 j,使得 nums i nums j 並且 i 和 j 的差的絕對值最大為 k。示例1 輸入 nums 1,2,3,1 k 3 輸出 true示例2 輸入 nums 1,0,1,1 k 1 輸出 true示例3 輸入 n...
219 存在重複元素 II
給定乙個整數陣列和乙個整數 k,判斷陣列中是否存在兩個不同的索引 i 和 j,使得 nums i nums j 並且 i 和 j 的差的絕對值最大為 k。示例 1 輸入 nums 1,2,3,1 k 3 輸出 true 示例 2 輸入 nums 1,0,1,1 k 1 輸出 true 示例 3 輸入...