414. 第三大的數(shù)(Python)

題目

難度:★★☆☆☆
類型:數(shù)組

給定一個(gè)非空數(shù)組,返回此數(shù)組中第三大的數(shù)。如果不存在,則返回?cái)?shù)組中最大的數(shù)。要求算法時(shí)間復(fù)雜度必須是O(n)。

示例

示例 1:
輸入: [3, 2, 1]
輸出: 1
解釋: 第三大的數(shù)是 1.

示例 2:
輸入: [1, 2]
輸出: 2
解釋: 第三大的數(shù)不存在, 所以返回最大的數(shù) 2 .

示例 3:
輸入: [2, 2, 3, 1]
輸出: 1
解釋: 注意,要求返回第三大的數(shù),是指第三大且唯一出現(xiàn)的數(shù)。
存在兩個(gè)值為2的數(shù),它們都排第二。

解答

下面是一個(gè)比較容易理解的解法,一趟遍歷的同時(shí),找到最大、次大和第三大數(shù)。

class Solution:
    def thirdMax(self, nums):
        top1, top2, top3 = float('-inf'), float('-inf'), float('-inf')
        for num in nums:
            if num == top1 or num == top2 or num == top3:   # 遇到相同的數(shù)
                continue                                    # 跳過(guò)
            if num > top1:                                  # 遇到了比三個(gè)數(shù)都大的數(shù)
                top1, top2, top3 = num, top1, top2          # 更新三個(gè)最大數(shù)
            elif num > top2:                                # 基于最大與次大數(shù)之間
                top2, top3 = num, top2                      # 更新后兩個(gè)數(shù)
            elif num > top3:                                # 介于次大和第三大數(shù)之間
                top3 = num                                  # 更新第三大數(shù)
        return top1 if top3 == float('-inf') else top3      # 返回第三大數(shù)或第一個(gè)大數(shù)

也有三趟遍歷進(jìn)行尋找的方式,看上去會(huì)更快一些:

class Solution(object):
    def thirdMax(self, nums):
        top1, top2, top3 = float('-inf'), float('-inf'), float('-inf')
        length = len(nums)

        # 一趟遍歷尋找第一大數(shù)
        for i in range(length):
            if nums[i] > top1:
                top1 = nums[i]

        # 第二趟遍歷尋找次大數(shù)
        for i in range(length):
            if top2 < nums[i] < top1:
                top2 = nums[i]
                
        # 第三趟遍歷尋找第三大數(shù)
        for i in range(length):
            if top3 < nums[i] < top2:
                top3 = nums[i]

        return top1 if top3 == float('-inf') else top3      # 返回第三大數(shù)或第一個(gè)大數(shù)

如有疑問(wèn)或建議,歡迎評(píng)論區(qū)留言~

?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時(shí)請(qǐng)結(jié)合常識(shí)與多方信息審慎甄別。
平臺(tái)聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡(jiǎn)書系信息發(fā)布平臺(tái),僅提供信息存儲(chǔ)服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

  • 一、基礎(chǔ)知識(shí):1、JVM、JRE和JDK的區(qū)別:JVM(Java Virtual Machine):java虛擬機(jī)...
    殺小賊閱讀 2,575評(píng)論 0 4
  • ??引用類型的值(對(duì)象)是引用類型的一個(gè)實(shí)例。 ??在 ECMAscript 中,引用類型是一種數(shù)據(jù)結(jié)構(gòu),用于將數(shù)...
    霜天曉閱讀 1,227評(píng)論 0 1
  • 第5章 引用類型(返回首頁(yè)) 本章內(nèi)容 使用對(duì)象 創(chuàng)建并操作數(shù)組 理解基本的JavaScript類型 使用基本類型...
    大學(xué)一百閱讀 3,691評(píng)論 0 4
  • 一、Python簡(jiǎn)介和環(huán)境搭建以及pip的安裝 4課時(shí)實(shí)驗(yàn)課主要內(nèi)容 【Python簡(jiǎn)介】: Python 是一個(gè)...
    _小老虎_閱讀 6,353評(píng)論 0 10
  • Swift1> Swift和OC的區(qū)別1.1> Swift沒有地址/指針的概念1.2> 泛型1.3> 類型嚴(yán)謹(jǐn) 對(duì)...
    cosWriter閱讀 11,681評(píng)論 1 32

友情鏈接更多精彩內(nèi)容