LeetCode--Find All Numbers Disappeared in an Array(找到数组中未出现的数字)

题目:

给定一个包含n个数字到数组nums,其中有的数字出现多次,有的数字出现一次。且所有的数字都在1到n之间。求该数组中未出现1到n之间到哪些数字。要求:不能使用多余到空间,且只能用O(n)的复杂度。不考虑返回的数组所占空间。

解题思路:

考虑到要有O(n)的复杂度,则联系到用哈希存储方式,使用python中的字典。

代码1(python):

class Solution(object):
    def findDisappearedNumbers(self, nums):
        """
        :type nums: List[int]
        :rtype: List[int]
        """
        if nums==[]:
            return []
        max_l = len(nums)
        dict_l = {}
        for i in nums:
            if i not in dict_l:
                dict_l[i]=1
        output = []
        for i in range(max_l):
            if i+1 not in dict_l:
                output.append(i+1)
        return output

代码2(python):

class Solution(object):
    def findDisappearedNumbers(self, nums):
        """
        :type nums: List[int]
        :rtype: List[int]
        """
        if nums==[]:
            return []
        max_l = len(nums)
        for i in range(max_l):
            count = abs(nums[i])
            nums[count-1]=-abs(nums[count-1])
        output = []
        for i in range(max_l):
            if nums[i] > 0 :
                output.append(i+1)
        return output

上述代码中,代码1使用了多余到空间。代码二没有用多余的空间。代码二将nums中包含所有数字对应位置的数都变为负数(即保留了数值信息,也标记了是否包含的信息),再遍历更新后的数组,为正的则是原数组未包含数据。

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值