LeetCode 414 第三大的數

2021-08-21 18:06:24 字數 1450 閱讀 7765

給定乙個非空陣列,返回此陣列中第三大的數。如果不存在,則返回陣列中最大的數。要求演算法時間複雜度必須是o(n)。

示例 1:

輸入: [3, 2, 1]

輸出: 1

解釋: 第三大的數是 1.

示例 2:

輸入: [1, 2]

輸出: 2

解釋: 第三大的數不存在, 所以返回最大的數 2

示例 3:

輸入: [2, 2, 3, 1]

輸出: 1

解釋: 注意,要求返回第三大的數,是指第三大且唯一出現的數。

存在兩個值為2的數,它們都排第二。

分為三種情況:

陣列的長度小於3,直接返回最大的數。

陣列長度大於等於3,但是不存在第三大的數,即第一大或第二大的數有重複,例如[3,2,2],這樣就沒有第三大的數,也應該返回最大的數。

陣列長度大於等於3,存在第三大的數。

對於第一種情況,直接根據陣列的長度來判斷。

第二和第三種情況,就需要借助乙個計數器count,來判斷是否有第三大的情況。

**如下:

class

solution:

defthirdmax

(self, nums):

""" :type nums: list[int]

:rtype: int

"""lens = len(nums) #獲取陣列的長度

if lens<3: #陣列的長度小於3,直接返回最大的數

return max(nums)

snums = sorted(nums,reverse=true) #將陣列逆序排序

count = 1

y = snums[0]

for x in snums[1:]:

if x!=y:

count = count + 1

y = x

if count==3:

return x

if count<3:

return snums[0]

class

solution:

defthirdmax

(self, nums):

""" :type nums: list[int]

:rtype: int

"""#先將陣列重複的元素除去,然後再進行逆序排序。

a = sorted(list(set(nums)),reverse=true)

if len(a) < 3:

return max(a)

return a[2]

這個**思路相比我的思路,最關鍵的就是利用set()去重。

LeetCode 414 第三大的數

隨機一題 給定乙個非空陣列,返回此陣列中第三大的數。如果不存在,則返回陣列中最大的數。要求演算法時間複雜度必須是o n 示例 1 輸入 3,2,1 輸出 1 解釋 第三大的數是 1.示例 2 輸入 1,2 輸出 2 解釋 第三大的數不存在,所以返回最大的數 2 示例 3 輸入 2,2,3,1 輸出 ...

LeetCode 414 第三大的數

給定乙個非空陣列,返回此陣列中第三大的數。如果不存在,則返回陣列中最大的數。要求演算法時間複雜度必須是o n 示例 1 輸入 3,2,1 輸出 1 解釋 第三大的數是 1.示例 2 輸入 1,2 輸出 2 解釋 第三大的數不存在,所以返回最大的數 2 示例 3 輸入 2,2,3,1 輸出 1 解釋 ...

LeetCode 414 第三大的數

題目鏈結 題目描述 給定乙個非空陣列,返回此陣列中第三大的數。如果不存在,則返回陣列中最大的數。要求演算法時間複雜度必須是o n 示例1輸入 3,2,1 輸出 1 解釋 第三大的數是 1.示例2輸入 1,2 輸出 2 解釋 第三大的數不存在,所以返回最大的數 2 示例3輸入 2,2,3,1 輸出 1...