【LeetCode 简单题】93-第三大的数

声明:

今天是第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​​​​​​​

猜你喜欢

转载自blog.csdn.net/weixin_41011942/article/details/84035519