[LeetCode]414. Third Maximum Number 解题报告(C++)

本文介绍了解决LeetCode上414题“第三大的数”的两种方法:一种是通过遍历数组找到三个最大值;另一种是利用set进行排序和去重,最后返回第三大或最大的数。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

[LeetCode]414. Third Maximum Number 解题报告(C++)

题目描述

Given a non-empty array of integers, return the third maximum number in this array. If it does not exist, return the maximum number. The time complexity must be in O(n).

Example 1:

Input: [3, 2, 1]

Output: 1

Explanation: The third maximum is 1.

Example 2:

Input: [1, 2]

Output: 2

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

Example 3:

Input: [2, 2, 3, 1]

Output: 1

Explanation: Note that the third maximum here means the third maximum distinct number.
Both numbers with value 2 are both considered as second maximum.

题目大意

  • 给定一个非空的数组.
  • 返回第三大的数字.
  • 注意.不存在返回第一大.
  • 要求时间复杂度O(n)
  • 且第三大和第二大不能相同.严格小于!

解题思路

方法1:

  • 遍历数组找最大.第二大.第三大.
  • 注意坑!!! 初始化要用 LONG_MIN
代码实现:
class Solution0 {
public:
    int thirdMax(vector<int>& nums) {
        long mx1 = LONG_MIN, mx2 = LONG_MIN, mx3 = LONG_MIN;
        for (int x : nums) {
            if (x > mx1) {
                mx3 = mx2;
                mx2 = mx1;
                mx1 = x;
            }
            else if (x<mx1&&x>mx2) {
                mx3 = mx2;
                mx2 = x;
            }
            else if (x > mx3&&x < mx2) {
                mx3 = x;
            }
        }
        return(mx3 == LONG_MIN || mx3 ==mx2 ? mx1 : mx3);
    }
};

方法2:

  • 利用 set 的自动排序和自动去重功能

代码实现:

class Solution {
public:
    int thirdMax(vector<int>& nums) {
        set<int> s;
        for (auto x : nums) {
            s.insert(x); 
            if (s.size() > 3) {
                s.erase(s.begin());
            }
        }
        return s.size() == 3 ? *s.begin() : *s.rbegin();
    }
};

小结

  • -
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值