Python 基础算法——取值第三个大的数

常见的两种算法分别是:排序法和维护三个变量法。

排序法:

排序法的思路是:先把数组中的元素去重,然后按照从小到大的顺序排序,最后返回排序后的数组中倒数第三个元素,即第三大的元素。

# 排序法    时间复杂度:O(nlogn)    空间复杂度:O(n)
def third_num1(nums):
    # 如果数组长度小于3,则返回最大值
    if len(nums) < 3:
        raise ValueError('数组中没有第三大的数')
    # 否则返回第三大的值
    else:
        return sorted(set(nums))[-3]

维护三个变量法:

维护三个变量法的思路是:用三个变量来分别存储数组中第一大、第二大、第三大的元素,然后遍历数组,对于每个元素,根据它和三个变量的大小关系,更新三个变量的值,最后返回第三大的变量。

# 维护三个变量法    时间复杂度:O(n)    空间复杂度:O(1)
def third_num2(nums):
    # 定义三个变量,分别存储第一大、大二大、大三大的值
    first = second = third = float('-inf')
    # 遍历数组
    for num in nums:
        # 如果当前值大于第一大的值,更新三个变量
        if num > first:
            third = second
            second = first
            first = num
        # 如果当前值=第一大的值,跳过
        elif num == first:
            continue
        # 如果当前值大于第二的值,更新后两个变量
        elif num > second:
            third = second
            second = num
        # 如果当前值=第二值,跳过
        elif num == second:
            continue
        # 如果当前值大于第三大值,更新最后一个变量
        elif num > third:
            third = num

    # 如果第三大的值仍为-inf,说明不存在,报错
    if third == float('-inf'):
        return ValueError('没有第三大的数')
    else:
        return third

first = second = third = float('-inf')  

注解:定义三个变量,分别命名为 first, second, third,并且把它们的初始值都设为负无穷。

负无穷是一个特殊的数值,它表示一个比任何有限的数都要小的数。在 Python 中,可以用 float(‘-inf’) 来表示负无穷。

这样做的目的是,为了方便后面的比较,让三个变量都从一个最小的数开始,然后逐渐更新为数组中更大的数。

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值