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 <= numsi <= 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;
    }
};
相关推荐
夊6 小时前
C语言第十一课:指针(五)
算法
小师兄吃牛肉6 小时前
C语言指针进阶全解析
java·c语言·算法
梦帮科技6 小时前
vLLM / TensorRT-LLM 极限推理:PagedAttention 细粒度物理页表管理与连续批处理(Continuous Batching)实战
数据结构·人工智能·分布式·python·深度学习·算法·vllm
做运维的阿瑞7 小时前
多表查询基础:INNER JOIN、LEFT JOIN、RIGHT JOIN
数据库·sql·mysql·算法
大侠归来8 小时前
C语言素数判断:从入门到进阶
java·c语言·算法
v:PLLucky208 小时前
农作物病虫害检测识别系统
深度学习·scrapy·算法·百度·微信公众平台
朝朝辞暮i8 小时前
C++ 第一阶段总结:从零基础到 ROS2 前置语法
开发语言·c++·算法
H.莓飛8 小时前
【数据结构】链表_OJ题
linux·数据结构·算法·链表
All for pursuit.9 小时前
【回溯-4】46.全排列
数据结构·c++·算法·leetcode
小鱼~~9 小时前
Recall@K、Precision@K、MRR、nDCG@K简介
人工智能·算法·机器学习