LeetCode刷題記錄——第219題(存在重複元素II)
阿新 • • 發佈:2019-01-13
題目描述
給定一個整數陣列和一個整數 k,判斷陣列中是否存在兩個不同的索引 和 ,使得 nums [i] = nums [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