美文网首页算法刷题
LeetCode刷题-第三大的数

LeetCode刷题-第三大的数

作者: 小鲨鱼FF | 来源:发表于2021-06-26 13:11 被阅读0次

    前言说明

    算法学习,日常刷题记录。

    题目连接

    第三大的数

    题目内容

    给你一个非空数组,返回此数组中第三大的数。如果不存在,则返回数组中最大的数。

    示例1:

    输入:[3, 2, 1]

    输出:1

    解释:第三大的数是1。

    示例2:

    输入:[1, 2]

    输出:2

    解释:第三大的数不存在,所以返回最大的数2。

    示例3:

    输入:[2, 2, 3, 1]

    输出:1

    解释:注意,要求返回第三大的数,是指在所有不同数字中排第三大的数。

    此例中存在两个值为2的数,它们都排第二。在所有不同数字中排第三大的数为1。

    提示:

    1 <= nums.length <= 10^4

    -2^31 <= nums[i] <= 2^31 - 1

    分析过程

    通过三次遍历,先找出第一大的数,再找出第二大的数,最后找出第三大的数。

    第一次遍历,按照传统的比较方法,找出第一大的数。

    第二次遍历,按照传统的比较方法,找出第二大的数,但是判断条件要加上小于第一大的数。

    第三次遍历,按照传统的比较方法,找出第三大的数,但是判断条件要加上小于第二大的数。

    最后按照题目要求,如果找到第三大的数,返回第三大的数;如果没有找到第三大的数,返回第一大的数。

    时间复杂度为O(3n),常数项可以去掉,O(3n)=O(n),所以时间复杂度为O(n)。

    解答代码

    class Solution {
        public int thirdMax(int[] nums) {
            // 三次遍历,先找出第一大的数,再找出第二大的数,最后找出第三大的数,时间复杂度O(3n),O(3n)=O(n)
    
            // 定义第一大的数
            int first = -2147483648;
    
            // 第一次遍历数组nums,找出第一大的数
            for (int num : nums) {
                if (num >= first) {
                    first = num;
                }
            }
    
            // 定义第二大的数
            int second = -2147483648;
    
            // 第二次遍历数组nums,找出第二大的数
            for (int num : nums) {
                if (num >= second && num < first) {
                    second = num;
                }
            }
    
            // 定义第三大的数
            int third = -2147483648;
    
            // 是否找到第三大的数
            boolean isFind = false;
    
            // 第三次遍历数组nums,找出第三大的数
            for (int num : nums) {
                if (num >= third && num < second) {
                    third = num;
                    isFind = true;
                }
            }
    
            if (isFind) {
                // 若找到第三大的数,返回第三大的数
                return third;
            } else {
                // 若没有找到第三大的数,返回第一大的数
                return first;
            }
        }
    }
    

    提交结果

    执行用时1ms,时间击败95.10%的用户,内存消耗38.2MB,空间击败73.55%的用户。

    运行结果

    原文链接

    原文链接:第三大的数

    相关文章

      网友评论

        本文标题:LeetCode刷题-第三大的数

        本文链接:https://www.haomeiwen.com/subject/wueoeltx.html