219 Contains Duplicate II

原题链接: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中基本的数据结构。

你可能感兴趣的:(219 Contains Duplicate II)