【力扣日記】219存在重複元素 II | 哈希

題目描述

給定一個整數數組和一個整數 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%的用戶

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章