leetcode【217+219 Contains Duplicate I+II】【python】

来源:互联网 发布:复杂网络建模是什么 编辑:程序博客网 时间:2024/05/30 05:02

这两道题都是让我们找到数组中是否有重复的数字,这种查找题首先就要考虑hash查找了,毕竟快。
217这道直接用dict就好,出现超过两次直接返回即可。

class Solution(object):    def containsDuplicate(self, nums):        """        :type nums: List[int]        :rtype: bool        """        if len(nums) <=1 :            return False        temp = dict()        for num in nums:            if temp.has_key(num):                temp[num] += 1                if temp[num] >=2:                    return True            else:                temp[num] = 1        return False

219除了要找到两个相同的数以外,还要求这两个数的index差值不超过k,其实还是用hash,这不过此时的value不能再存出现的次数,而是要记录index,这里要注意一旦两个相同的数出现,但是index超出了k,那么我们要更新这个value,使之成为最新的index,因为不更新的话再出现相同的数字,只会差值越大。

class Solution(object):    def containsNearbyDuplicate(self, nums, k):        """        :type nums: List[int]        :type k: int        :rtype: bool        """        if len(nums) < 2:            return False        temp = dict()        for i in range(len(nums)):            if temp.has_key(nums[i]):                if i - temp[nums[i]] <= k:                    return True                else:                    temp[nums[i]] = i            else:                temp[nums[i]] = i        return False
0 0
原创粉丝点击