How to find second largest number in a list?

前端 未结 14 2003
遇见更好的自我
遇见更好的自我 2020-12-06 15:38

So I have to find the second largest number from list. I am doing it through simple loops.

My approach is to divide a list into two parts and then find the largest n

14条回答
  •  佛祖请我去吃肉
    2020-12-06 15:45

    You don't have to sort the input, and this solution runs in O(n). Since your question says you cannot use builtin functions, you can use this

    alist=[-45,0,3,10,90,5,-2,4,18,45,100,1,-266,706]
    largest, larger = alist[0], alist[0]
    
    for num in alist:
        if num > largest:
            largest, larger = num, largest
        elif num > larger:
            larger = num
    print larger
    

    Output

    100
    

    Keep track of the largest number and the second largest number (larger variable stores that in the code). If the current number is greater than the largest, current number becomes the largest, largest becomes just larger.

    largest, larger = num, largest is a shortcut for

    temp = largest
    largest = num
    larger = temp
    

    Edit: As per OP's request in the comments,

    def findLarge(myList):
        largest, larger = myList[0], myList[0]
        for num in myList:
            if num > largest:
                largest, larger = num, largest
            elif num > larger:
                larger = num
        return largest, larger
    
    alist=[-45,0,3,10,90,5,-2,4,18,45,100,1,-266,706]
    
    firstLargest, firstLarger  = findLarge(alist[:len(alist)//2])
    secondLargest, secondLarger = findLarge(alist[len(alist)//2:])
    
    print sorted((firstLarger, firstLargest, secondLarger, secondLargest))[-2]
    

提交回复
热议问题