1. 程式人生 > >LeetCode刷題記錄——第219題(存在重複元素II)

LeetCode刷題記錄——第219題(存在重複元素II)

題目描述

給定一個整數陣列和一個整數 k,判斷陣列中是否存在兩個不同的索引 i i j j ,使得 nums [i] = nums [j],並且 i

i j j 的差的絕對值最大為 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

思路分析

  • 當 nums 長度小於2的時候,不可能存在著重複元素,返回False
  • 利用字典記錄nums中出現的元素,key為具體的值,value為該值在nums中的索引位置
  • 例如[1,2,3,1,5,1] ;k = 2
    • nums[i]中儲存的是值的資訊。每一輪判斷目前的nums[i]在不在字典d中,如果在,判斷當前的索引位置和d中key所對應的value值的位置的差,滿足則返回True;不滿足的話,說明兩者的距離超過了,那麼就將key所對應的value值更新為最新的索引。(這一步更新很重要呀)
class Solution
: def containsNearbyDuplicate(self, nums, k): """ :type nums: List[int] :type k: int :rtype: bool """ if len(nums) < 2: return False d = {} for i in range(len(nums)): if nums[i] in d and (i - d[nums[i]]) <=k: # i - d[nums[i]]計算距離 return True else: d[nums[i]] = i return False