原题链接:Contains Duplicate II
这题的答案是我在leetcode官方论坛上找的,我自己写的代码超时了=_=......
以下是代码:
class Solution:
# @param {integer[]} nums
# @param {integer} k
# @return {boolean}
def containsNearbyDuplicate(self, nums, k):
d = {}
for i in range(len(nums)):
if nums[i] in d:
j = d[nums[i]]
if i - j <= k:
return True
d[nums[i]] = i
return False
简单说两句:
之前我的做法用了两层循环,比较蠢。这个人的做法很好,巧妙的利用了字典这个数据结构。
首先,遍历
nums
这个数组(更准确地说是list)。当某个值第一次出现时,在字典中记录下这个值(以值为key,以该值出现的位置坐标为value)。接下来,若发现数组中的某个值已经存在于字典中,再进一步通过 存储在字典中的 上一次该元素出现的位置坐标,即value,来判断距离是否不大于k。
总结:注意理解和使用Python中基本的数据结构。