第三大的数(简单)

题目

给你一个非空数组,返回此数组中 第三大的数 。如果不存在,则返回数组中最大的数。

思路

一个简单的做法是先去重,然后我们进行一次遍历,并使用三个变量a,b,c 分别表示最大值,次大值和第三大的数。

  • 如果当前元素比a大,则说明其一定比b和c都大。 我们同时更新b和c的值。 具体来说就是将b更新到c,a更新到b(可以形象地考虑成冒泡)。
  • 否则我们继续判断是否比b大,如果比b大,那么肯定也比c大,我们同时需要更新c的值。
  • 如果都不比a和b大,我们继续判断是否比c大,如果是,我们更新c的值

我们初始化a,b,c为 负无穷。 这样我们最后只要判断c是不是负无穷即可,如果是负无穷我们返回a,否则我们返回c。

实际上我们根本没有必要去重。我们只需要在后面的两个elif中判断其是否和a,b相等即可

代码

from math import isinf
class Solution:
    def thirdMax(self, nums: List[int]) -> int:
        a = b = c = float('-inf') # 最大值,次大值和第三大的数

        for num in nums:
            if num > a:
                c = b
                b = a
                a = num
            elif num > b and num != a:
                c = b
                b = num
            elif num > c and num != b and num != a:
                c = num
        return a if isinf(c) else c
            
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值