第三大的数
今天是小安开始Leetcode刷题的第414题,正文开始ing?
题目描述
给定一个非空数组,返回此数组中第三大的数。如果不存在,则返回数组中最大的数。要求算法时间复杂度必须是O(n)。题目原址
示例1
输入: [3, 2, 1]
输出: 1
解释: 第三大的数是 1.
示例2
输入: [1, 2]
输出: 2
解释: 第三大的数不存在, 所以返回最大的数 2 .
示例3
输入: [2, 2, 3, 1]
输出: 1
解释: 注意,要求返回第三大的数,是指第三大且唯一出现的数。
存在两个值为2的数,它们都排第二。、
方法:遍历
思路
由于要求时间复杂度必须为O(n),则排序和优先队列不可使用。注意设置flag标记知否存在第三大值。
代码实现
【Python实现】
import sys
class Solution(object):
def thirdMax(self, nums):
"""
:type nums: List[int]
:rtype: int
"""
MIN =-sys.maxsize-1#设置整数最小值
if len(nums)==0:
return 0
if len(nums)==1:
return nums[0]
if len(nums)==2:
return max(nums)
max1=MIN#赋初值
max2=MIN
max3=MIN
flag=0#标记传递过几次值,若少于3次,即只有最大值和第二大值
for i in range(len(nums)):
if nums[i]>max1:
flag=flag+1
max3=max2#原第二大值传递给第三大值
max2=max1#原第一大值传递给第二大
max1=nums[i]#更新第三大值
elif nums[i]>max2 and nums[i]<max1:
flag=flag+1
max3=max2
max2=nums[i]
elif nums[i]>=max3 and nums[i]<max2:
flag=flag+1
max3=nums[i]
if(max3!=max2 and flag>=3):
return max3
else: return max1