[LeetCode][Python]414. Third Maximum Number

Given a non-empty array of integers, return the third maximum number in this array. If it does not exist, return the maximum number. The time complexity must be in O(n).

Example 1:

Input: [3, 2, 1]

Output: 1

Explanation: The third maximum is 1.

Example 2:

Input: [1, 2]

Output: 2

Explanation: The third maximum does not exist, so the maximum (2) is returned instead.

Example 3:

Input: [2, 2, 3, 1]

Output: 1

Explanation: Note that the third maximum here means the third maximum distinct number.
Both numbers with value 2 are both considered as second maximum.

思路:

  1. 先通過歸并排序把數(shù)組有序化,然后除去數(shù)組中重復(fù)的元素徙邻,最后拿到第三大的元素。
  2. Python中有個collections模塊对粪,它提供了個類Counter,用來跟蹤值出現(xiàn)了多少次装蓬。注意key的出現(xiàn)順序是根據(jù)計數(shù)的從大到小著拭。它的一個方法most_common(n)返回一個list, list中包含Counter對象中出現(xiàn)最多前n個元素。
  3. heapq模塊有兩個函數(shù):nlargest() 和 nsmallest() 可以從一個集合中獲取最大或最小的N個元素列表牍帚。heapq.nlargest (n, heap) #查詢堆中的最大元素儡遮,n表示查詢元素個數(shù)
    def thirdMax3(self, nums):
        import heapq
        return heapq.nlargest(3, set(nums))[2 if len(set(nums))>2 else 0]

    def thirdMax4(self, nums):
        nums = sorted(list(set(nums)))
        if len(nums)<3:
            return max(nums)
        else:
            return nums[-3]

其他人的解法:

  1. 把數(shù)組中重復(fù)的元素通過set去掉,然后remove掉兩次最大值暗赶,在整下的元素里面取最大值鄙币,就是第三大值。

  2. 取一個數(shù)組放入三個最小值元素忆首,然后依次從nums中取值和這三個值比較爱榔, 如果比哪個值大被环,就放在對應(yīng)的位置糙及。如果最小值元素還在數(shù)組里面,就返回最大值筛欢,否則就返回第三個元素(也即是第三大元素)

#!/usr/bin/env python
# -*- coding: UTF-8 -*-
class Solution(object):
   def thirdMax(self, nums):
       """
       :type nums: List[int]
       :rtype: int
       """
       if len(nums) <= 2:
           return max(nums)
       nums = set(nums)
       nums.remove(max(nums))
       nums.remove(max(nums))
       return max(nums)

   def thirdMax2(self, nums):
       v = [float('-inf'), float('-inf'), float('-inf')]
       for num in nums:
           if num not in v:
               if num > v[0]:
                   v = [num, v[0], v[1]]
                   print v
               elif num > v[1]:
                   v = [v[0], num, v[1]]
                   print v
               elif num > v[2]:
                   v = [v[0], v[1], num]
                   print v
       return max(nums) if float('-inf') in v else v[2]



if __name__ == '__main__':
   sol = Solution()
   # s = [3, 2, 1]
   # print sol.thirdMax(s)
   # print sol.thirdMax2(s)
   s = [2, 2, 3, 1]
   # print sol.thirdMax(s)
   print sol.thirdMax2(s)

   s = [1, 2]
   # print sol.thirdMax(s)
   # print sol.thirdMax2(s)
最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末浸锨,一起剝皮案震驚了整個濱河市,隨后出現(xiàn)的幾起案子版姑,更是在濱河造成了極大的恐慌柱搜,老刑警劉巖,帶你破解...
    沈念sama閱讀 207,113評論 6 481
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件剥险,死亡現(xiàn)場離奇詭異聪蘸,居然都是意外死亡,警方通過查閱死者的電腦和手機,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 88,644評論 2 381
  • 文/潘曉璐 我一進店門健爬,熙熙樓的掌柜王于貴愁眉苦臉地迎上來控乾,“玉大人,你說我怎么就攤上這事娜遵⊥珊猓” “怎么了?”我有些...
    開封第一講書人閱讀 153,340評論 0 344
  • 文/不壞的土叔 我叫張陵设拟,是天一觀的道長慨仿。 經(jīng)常有香客問我,道長纳胧,這世上最難降的妖魔是什么镰吆? 我笑而不...
    開封第一講書人閱讀 55,449評論 1 279
  • 正文 為了忘掉前任,我火速辦了婚禮跑慕,結(jié)果婚禮上鼎姊,老公的妹妹穿的比我還像新娘。我一直安慰自己相赁,他們只是感情好相寇,可當(dāng)我...
    茶點故事閱讀 64,445評論 5 374
  • 文/花漫 我一把揭開白布。 她就那樣靜靜地躺著钮科,像睡著了一般唤衫。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發(fā)上绵脯,一...
    開封第一講書人閱讀 49,166評論 1 284
  • 那天佳励,我揣著相機與錄音,去河邊找鬼蛆挫。 笑死赃承,一個胖子當(dāng)著我的面吹牛,可吹牛的內(nèi)容都是我干的悴侵。 我是一名探鬼主播瞧剖,決...
    沈念sama閱讀 38,442評論 3 401
  • 文/蒼蘭香墨 我猛地睜開眼,長吁一口氣:“原來是場噩夢啊……” “哼可免!你這毒婦竟也來了抓于?” 一聲冷哼從身側(cè)響起,我...
    開封第一講書人閱讀 37,105評論 0 261
  • 序言:老撾萬榮一對情侶失蹤浇借,失蹤者是張志新(化名)和其女友劉穎捉撮,沒想到半個月后,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體妇垢,經(jīng)...
    沈念sama閱讀 43,601評論 1 300
  • 正文 獨居荒郊野嶺守林人離奇死亡巾遭,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點故事閱讀 36,066評論 2 325
  • 正文 我和宋清朗相戀三年肉康,在試婚紗的時候發(fā)現(xiàn)自己被綠了。 大學(xué)時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片灼舍。...
    茶點故事閱讀 38,161評論 1 334
  • 序言:一個原本活蹦亂跳的男人離奇死亡迎罗,死狀恐怖,靈堂內(nèi)的尸體忽然破棺而出片仿,到底是詐尸還是另有隱情纹安,我是刑警寧澤,帶...
    沈念sama閱讀 33,792評論 4 323
  • 正文 年R本政府宣布砂豌,位于F島的核電站厢岂,受9級特大地震影響,放射性物質(zhì)發(fā)生泄漏阳距。R本人自食惡果不足惜塔粒,卻給世界環(huán)境...
    茶點故事閱讀 39,351評論 3 307
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望筐摘。 院中可真熱鬧卒茬,春花似錦、人聲如沸咖熟。這莊子的主人今日做“春日...
    開封第一講書人閱讀 30,352評論 0 19
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽馍管。三九已至郭赐,卻和暖如春,著一層夾襖步出監(jiān)牢的瞬間确沸,已是汗流浹背捌锭。 一陣腳步聲響...
    開封第一講書人閱讀 31,584評論 1 261
  • 我被黑心中介騙來泰國打工, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留罗捎,地道東北人观谦。 一個月前我還...
    沈念sama閱讀 45,618評論 2 355
  • 正文 我出身青樓,卻偏偏與公主長得像桨菜,于是被迫代替她去往敵國和親豁状。 傳聞我的和親對象是個殘疾皇子,可洞房花燭夜當(dāng)晚...
    茶點故事閱讀 42,916評論 2 344

推薦閱讀更多精彩內(nèi)容