414.第三大的数
题目描述
思路:最小堆、排序
最小堆
以最小堆扫描,如果大小超过3就提出一个最小的元素(必然不是第三大),返回最终结果即可。
class Solution:
def thirdMax(self, nums: List[int]) -> int:
K = 3
pq = []
for num in set(nums):
heapq.heappush(pq, num)
if len(pq) > K:
heapq.heappop(pq)
return heapq.heappop(pq) if len(pq) == K else pq[-1]
排序
从小到大排序数组,从头开始遍历数组,通过判断相邻元素是否不同,统计不同元素的个数。如果能找到3个不同的元素,就返回第三大的元素,否则返回最大的元素。
class Solution:
def thirdMax(self, nums: List[int]) -> int:
nums.sort(reverse=True)
diff = 1
for i in range(1, len(nums)):
if nums[i] != nums[i - 1]:
diff += 1
if diff == 3: # 此时 nums[i] 就是第三大的数
return nums[i]
return nums[0]