牛客python刷题记录——输入stdin篇——寻找数组中第二第三大的值

之前一直使用

li=input()
list= [int(n) for n in li.split()]

将用户的输入转化为整形数组
结果今天做题一直报错,试了n种方法,都不对,不能很好的读取多行的数据。最后借鉴了其他人的写法

import sys

while True:
    line = sys.stdin.readline().strip()
    if line=='':
        break
    nums = list(map(int, line.split()))
    if len(nums)<3:
        print("0")
        break

这样做的好处是可以读取多行数据
另外今天刷题学到了如何从list中取得最大的三个值:

def find3PosMax(nums):
    max1, max2, max3 = None, None, None
    for num in nums:
        if num < 0:
            continue
        if max1 is None or max1<num:
            max1, num = num, max1
        if num is None:
            continue
        if max2 is None or num>max2:
            max2, num = num, max2
        if num is None:
            continue
        if max3 is None or num>max3:
            max3 = num
    return max1, max2, max3

复杂度很低的一种算法
当然也可以用sort(reverse=True) 将一个列表降序排列取前三个值,只不过时间复杂度增加

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章