Leetcode 414.第三大的数

原题链接:Leetcode 414. Third Maximum Number

Given an integer array nums, return the third distinct maximum number in this array. If the third maximum does not exist, return the maximum number.

Example 1:

Input: nums = [3,2,1]

Output: 1

Explanation:

The first distinct maximum is 3.

The second distinct maximum is 2.

The third distinct maximum is 1.

Example 2:

Input: nums = [1,2]

Output: 2

Explanation:

The first distinct maximum is 2.

The second distinct maximum is 1.

The third distinct maximum does not exist, so the maximum (2) is returned instead.

Example 3:

Input: nums = [2,2,3,1]

Output: 1

Explanation:

The first distinct maximum is 3.

The second distinct maximum is 2 (both 2's are counted together since they have the same value).

The third distinct maximum is 1.

Constraints:

  • 1 <= nums.length <= 104
  • -231 <= nums[i] <= 231 - 1

Follow up: Can you find an O(n) solution?


方法一:遍历数组

思路:

题目要求返回第三大的数,以及当没有三个不同数的情况下返回第二个数

那么就维护三个值:first、second、third,最后分情况返回即可

比较麻烦的就是初始值,需要设置一个最小的正数,这里用 LONG_LONG_MIN

C++ 代码:

cpp 复制代码
class Solution {
public:
    // const long long Min = -(1LL << 31) - 1;
    int thirdMax(vector<int>& nums) {
        long first = LONG_LONG_MIN, second = LONG_LONG_MIN, third = LONG_LONG_MIN;    // 当前最大的三个数
        
        // 遍历的同时维护这三个数
        for(int i = 0; i < nums.size(); i++ ){
            if(nums[i] > first){
                third = second;
                second = first;
                first = nums[i];
            }
            else if(nums[i] < first && nums[i] > second){
                third = second;
                second = nums[i];
            }
            else if(nums[i] < second && nums[i] > third){
                third = nums[i];
            }
        }

        if(third == LONG_LONG_MIN)
            return first;
        return third;
    }
};
相关推荐
ZPC82101 天前
PPO算法训练机器人时,如何定义状态/动作/奖励
人工智能·算法·机器人
永远都不秃头的程序员(互关)1 天前
数据结构实战:从复杂度到C++实现
算法
努力学算法的蒟蒻1 天前
day42(12.23)——leetcode面试经典150
算法·leetcode·面试
鹿角片ljp1 天前
力扣226.翻转二叉树-递归
数据结构·算法·leetcode
TechNomad1 天前
排序算法:归并排序算法
算法·排序算法
WBluuue1 天前
数据结构和算法:Morris遍历
数据结构·c++·算法
scx201310041 天前
20251117Manacher总结
算法·manacher
iAkuya1 天前
(leetcode)力扣100 21搜索二维矩阵2(z型搜索)
linux·leetcode·矩阵
(●—●)橘子……1 天前
记力扣42.接雨水 练习理解
笔记·学习·算法·leetcode·职场和发展
旺仔小拳头..1 天前
数据结构(三)----树/二叉树/完全二叉树/线索二叉树/哈夫曼树/树、二叉树、森林之间的转换/前 中 后序遍历
算法