414. Third Maximum Number(easy)

本文介绍了一种高效算法,用于从非空整数数组中找出第三大的数。如果不存在,则返回最大的数。通过C++和Java代码实现,展示了如何在O(n)时间复杂度内解决此问题。包括多个示例输入和输出,以及对代码的详细解释。

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

Easy

430810FavoriteShare

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.

 

C++:

/*
 * @Autor: SourDumplings
 * @Date: 2019-09-24 15:17:43
 * @Link: https://github.com/SourDumplings/
 * @Email: changzheng300@foxmail.com
 * @Description: https://leetcode.com/problems/third-maximum-number/
 */

#include <climits>

class Solution
{
public:
    int thirdMax(vector<int> &nums)
    {
        int f = INT_MIN, s = INT_MIN, t = INT_MIN;
        for (auto &&i : nums)
        {
            if (i > f)
            {
                f = i;
            }
        }
        for (auto &&i : nums)
        {
            if (i > s && i < f)
            {
                s = i;
            }
        }
        bool hasT = false;
        for (auto &&i : nums)
        {
            if (i >= t && i < s)
            {
                hasT = true;
                t = i;
            }
        }
        return hasT ? t : f;
    }
};

 Java:

/*
 * @Autor: SourDumplings
 * @Date: 2019-09-24 15:31:53
 * @Link: https://github.com/SourDumplings/
 * @Email: changzheng300@foxmail.com
 * @Description: https://leetcode.com/problems/third-maximum-number/
 */

class Solution
{
    public int thirdMax(int[] nums)
    {
        int f = Integer.MIN_VALUE;
        int s = Integer.MIN_VALUE;
        int t = Integer.MIN_VALUE;
        for (int i : nums)
        {
            if (i > f)
            {
                f = i;
            }
        }
        for (int i : nums)
        {
            if (i > s && i < f)
            {
                s = i;
            }
        }
        boolean hasT = false;
        for (int i : nums)
        {
            if (i >= t && i < s)
            {
                hasT = true;
                t = i;
            }
        }
        return hasT ? t : f;
    }
}

 

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值