📅  最后修改于: 2023-12-03 14:57:45.426000             🧑  作者: Mango
给定一个整数数组 nums,请你找出其中所有的第三大的数。
如果不存在第三大的数,则返回数组中最大的数。
要求算法时间复杂度必须是 O(n)。
输入: [3, 2, 1]
输出: 1
解释: 第三大的数不存在, 所以返回最大的数 1 。
输入: [1, 2]
输出: 2
解释: 第三大的数不存在, 所以返回最大的数 2 。
输入: [2, 2, 3, 1]
输出: 1
解释: 注意,要求返回第三大的数,而不是第三大的不同数,故返回最大的 1 。
使用 Python 语言,可以使用 set 去重、排序后取值的方式,也可以使用 heapq 模块找第三大的元素。首先,对列表去重和排序。然后,依次遍历去重后的列表,取前三个元素和当前元素比较即可。
时间复杂度为 O(nlogn)。
class Solution:
def thirdMax(self, nums: List[int]) -> int:
nums = sorted(list(set(nums)))
if len(nums) < 3:
return nums[-1]
return nums[-3]
使用 Python 语言,我们可以使用三个变量分别保存第一大、第二大和第三大的元素,遍历列表,更新三个变量即可。
时间复杂度为 O(n)。
class Solution:
def thirdMax(self, nums: List[int]) -> int:
first = second = third = float('-inf')
for num in nums:
if num > first:
third, second, first = second, first, num
elif first > num > second:
third, second = second, num
elif second > num > third:
third = num
return third if third != float('-inf') else first