題目描述
給定一個整數數組和一個整數 k,判斷數組中是否存在兩個不同的索引 i 和 j,使得 nums [i] = nums [j],並且 i 和 j 的差的絕對值小於等於 k。
算法思路
原題目是i 和 j 的差的絕對值等於 k。
於是立馬寫出了:
class Solution:
def containsNearbyDuplicate(self, nums: List[int], k: int) -> bool:
for i in range(len(nums)-k):
if nums[i]==nums[i+k]:return True
return False
但是這個過不了[99,99],k=2
才知道題目描述有問題。
——————
當條件爲 i 和 j 的差的絕對值小於等於 k時,結合標籤【哈希】有了思路。
算法
class Solution:
def containsNearbyDuplicate(self, nums: List[int], k: int) -> bool:
di={}
for idx,x in enumerate(nums):
if x in di:
if abs(di[x]-idx)<=k:
return True
di[x]=idx
else:di[x]=idx
return False
這裏必須補充一點,如果把最開始的參數放到函數參數列表初始化,如:
def containsNearbyDuplicate(self, nums: List[int], k: int,di={})
,偶爾在提交時會引起一些問題,所以還是放到下面初始化吧。
執行用時 :64 ms, 在所有 Python3 提交中擊敗了94.22%的用戶
內存消耗 :21.2 MB, 在所有 Python3 提交中擊敗了30.53%的用戶