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

这两道题都是让我们找到数组中是否有重复的数字,这种查找题首先就要考虑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
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值