声明:
今天是第93道题。给定一个非空数组,返回此数组中第三大的数。以下所有代码经过楼主验证都能在LeetCode上执行成功,代码也是借鉴别人的,在文末会附上参考的博客链接,如果侵犯了博主的相关权益,请联系我删除
(手动比心ღ( ´・ᴗ・` ))
正文
题目:给定一个非空数组,返回此数组中第三大的数。如果不存在,则返回数组中最大的数。要求算法时间复杂度必须是O(n)。
示例 1:
输入: [3, 2, 1] 输出: 1 解释: 第三大的数是 1示例 2:
输入: [1, 2] 输出: 2 解释: 第三大的数不存在, 所以返回最大的数 2示例 3:
输入: [2, 2, 3, 1] 输出: 1 解释: 注意,要求返回第三大的数,是指第三大且唯一出现的数,存在两个值为2的数,它们都排第二
解法1。考虑到时间复杂度,说明最多用1个for循环遍历数组找到前三个大的值,可以设置1个数组动态更新大小排前三的值,代码如下。
执行用时: 48 ms, 在Third Maximum Number的Python3提交中击败了83.77% 的用户
- float("inf"):表示正无穷
- float("-inf"):表示负无穷
class Solution:
def thirdMax(self, nums):
"""
:type nums: List[int]
:rtype: int
"""
res = [float("-inf")] * 3
for i in nums:
if i in res:
continue
if i > res[0]:
res = [i,res[0],res[1]]
elif i > res[1]:
res = [res[0],i,res[1]] # 注意这里一定要用elif不能用if以保证只执行一次更新,且这里面一定只保留res[0]和res[1],res[2]肯定是被踢掉的那个
elif i > res[2]:
res = [res[0],res[1],i]
return res[-1] if res[2] != float("-inf") else res[0]
结尾
解法1:https://blog.csdn.net/qq_34364995/article/details/80786989