LeetCode 刷题总结 (array)-----2

Q217. Contains Duplicate https://leetcode.com/problems/contains-duplicate/

判断数组中是否存在冗余项,若有重复项则返回True,否则返回False

idea:

利用 list 的count(i) 函数,判断list种的每个元素i,nums.count(i)是否≥2,若是,则返回True,break。

class Solution(object):
    def containsDuplicate(self, nums):
        """
        :type nums: List[int]
        :rtype: bool
        """
        for i in range(0,len(nums)):
            if nums.count(nums[i]) >=2:
                return True
        return False 

 超时!

discussion 解决方案1:

将数组元素排序,若nums[i] == nums[i+1],则说明有重复项,返回True;若循环至数组末端都没有出现重复项则返回False

class Solution(object):
    def containsDuplicate(self, nums):
        """
        :type nums: List[int]
        :rtype: bool
        """
        nums.sort()
        for i in range(0,len(nums)-1):
            if nums[i] == nums[i+1]:
                return True
        return False 

 

Q268. Missing Number https://leetcode.com/problems/missing-number/

给定一组包含n个不同数据的数组,数组元素是从0,1,2...n中选出的,求missing number。

idea:

构建原始数组list :[0,1,2,...,n],依次遍历list元素,若list[i] not in nums,则 list[i] 就是missing number。

class Solution(object):
    def missingNumber(self, nums):
        """
        :type nums: List[int]
        :rtype: int
        """
        n = len(nums)+1
        for i in range(0,n,1):
            if i not in nums:
                return i
            

耗时较多!not in 也需要依次比较,因此时间复杂度为O(N2)

discussion 解决方案1:

将nums元素进行排序—遍历nums元素—expect_num = nums[i]+1—判断后一个元素是否等于expect_num

class Solution(object):
    def missingNumber(self, nums):
        """
        :type nums: List[int]
        :rtype: int
        """
        nums.sort()
        if nums[-1] != len(nums):
            return len(nums)
        elif nums[0] != 0:
            return 0
        
        for i in nums:
            expect_num = i+1
            if nums[i+1] != expect_num:
                return expect_num
            

knowledge:

注意首尾为missing number的情况。

discussion 解决方案2:

sum大法:

class Solution(object):
    def missingNumber(self, nums):
        """
        :type nums: List[int]
        :rtype: int
        """
        
        expect_sum = sum(range(len(nums)+1))
        nums_sum = sum(nums)
        return expect_sum-nums_sum

后面两种解决方案时间大大缩短了

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值