牛客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) 將一個列表降序排列取前三個值,只不過時間複雜度增加

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