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;
    }
};
相关推荐
INGNIGHT8 分钟前
1908 · 布尔表达式求值(stack单调栈&dfs)
开发语言·c++·算法
lucas_AI25 分钟前
把表格压成 64 个 token,长文档问答反而更准了:先找表,再看数
人工智能·深度学习·算法
Zzz 小生1 小时前
Lazy Theta*:把昂贵的视线检测留到“真正需要”时再做
人工智能·算法·贪心算法·推荐算法
l1258651 小时前
# LangGraph Deep Research Agent 全流程设计:多轮研究、人机协同与真实来源管理
数据库·人工智能·python·算法·自然语言处理·oracle·langchain
青少儿编程课堂2 小时前
图形化编程实战:智能交通灯调度台,一个作品讲透循环、条件与广播
c++·python·算法·bfs·信息学竞赛
evans在进步2 小时前
LeetCode 438 找到字符串中所有字母异位词:滑动窗口与排序解法详解
算法·leetcode·职场和发展
M78佐菲2 小时前
Linux多线程:创建、回收与互斥同步
linux·笔记·学习·算法
小手cool2 小时前
使用递归对数组进行反转操作
java·数据结构·算法
兔兔兔兔12 小时前
记录C++ 13
开发语言·c++·算法
码行山野赴时序归途2 小时前
从暴力到最优:三道 C 语言入门题的解法思路
c语言·开发语言·数据结构·算法·leetcode·排序算法