219 存在重複元素 II

2021-10-23 20:15:36 字數 1299 閱讀 7884

給定乙個整數陣列和乙個整數 k,判斷陣列中是否存在兩個不同的索引 i 和 j,使得 nums [i] = nums [j],並且 i 和 j 的差的 絕對值 至多為 k。

示例 1:

輸入:nums = [1,2,3,1], k = 3

輸出:true

題目可以這樣表述(給定乙個整數陣列和乙個整數 k,判斷陣列中是否存在兩個相同的值,它們的索引值的差值小於k)

因為給與的陣列是無序的且根據題目要求不能改變順序,所以二分搜尋不能使用。

根據題意,可以規定i

&j−i

i&j−i

<

k,維護乙個滑動視窗,需要遍歷長度為n的陣列巢狀長度為k的視窗。

class

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

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 輸入...