【第三大的数】python

class Solution:
    def thirdMax(self, nums: List[int]) -> int:
        n=len(nums)
        mx=max(nums)
        mn=min(nums)
        third_mx=0
        #表示第几个大的数
        flag=0
        #逆序检验在不在nums数组里面
        for i in range(mx,mn-1,-1):
            if i in nums:
                flag+=1
                if flag==3:
                    return i
        return mx

可惜超时,因为遍历了很多次,时间复杂度太高

所以考虑去掉逆序检验

 

class Solution:
    def thirdMax(self, nums: List[int]) -> int:
        first_mx=second_mx=third_mx=float('-inf')
        for i in nums:
            #原本2 3 5 ,来了个7
            #不取等号就过滤掉相同的数了
            if i>first_mx:
                third_mx=second_mx
                second_mx=first_mx
                first_mx=i
            elif second_mx<i<first_mx:
                third_mx=second_mx
                second_mx=i
            elif third_mx<i<second_mx:
                third_mx=i
        #这个判断是解决没有第三大数的情况
        if third_mx!=float('-inf'):
           return third_mx
        return first_mx

next one 

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值