第三大的数
题目描述:
给你一个非空数组,返回此数组中 第三大的数 。如果不存在,则返回数组中最大的数。
示例 :
输入:[2, 2, 3, 1]
输出:1
解释:注意,要求返回第三大的数,是指在所有不同数字中排第三大的数。
此例中存在两个值为 2 的数,它们都排第二。在所有不同数字中排第三大的数为 1 。
提示:
- 1 <= nums.length <= 104
- -231 <= nums[i] <= 231 - 1
解法
预设三个数字作为前三大数字,然后进行遍历数组,对这三个数字进行更新。预设值需要比数组中可能的最小值还要小,如此,若最后第三大数字对应的变量值没有发生改变,那么说明不存在第三大数字;反之则存在。
注:思路主要源于 官方解答。
代码
class Solution:
def thirdMax(self, nums: List[int]) -> int:
a, b, c = float('-inf'), float('-inf'), float('-inf')
for num in nums:
if num > a:
a, b, c = num, a, b
elif a > num > b:
b, c = num, b
elif b > num > c:
c = num
return a if c == float('-inf') else c
测试结果
执行用时:40 ms, 在所有 Python3 提交中击败了 29.91% 的用户
内存消耗:15.1 MB, 在所有 Python3 提交中击败了 84.00% 的用户
说明
算法题来源:力扣(LeetCode)