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;
    }
};
相关推荐
无限进步_8 分钟前
【数据结构&C语言】对称二叉树的递归之美:镜像世界的探索
c语言·开发语言·数据结构·c++·算法·github·visual studio
im_AMBER20 分钟前
Leetcode 98 从链表中移除在数组中存在的节点
c++·笔记·学习·算法·leetcode·链表
高山上有一只小老虎1 小时前
灵异背包?
java·算法
s09071361 小时前
【综述】前视二维多波束成像声呐(FLS)图像处理算法全解析:从成像到深度学习
图像处理·人工智能·算法·声呐·前视多波束
星河耀银海1 小时前
人工智能从入门到精通:机器学习基础算法实战与应用
人工智能·算法·机器学习
nice_lcj5201 小时前
数据结构之堆:从概念到应用全解析(附TOP-K经典问题)
java·数据结构·算法
无言(* ̄(エ) ̄)1 小时前
进程---Linux/C语言
java·开发语言·算法
漫随流水1 小时前
leetcode算法(429.N叉树的层序遍历)
数据结构·算法·leetcode·二叉树
漫随流水2 小时前
leetcode算法(116.填充每个节点的下一个右侧节点指针)
数据结构·算法·leetcode·二叉树
_OP_CHEN2 小时前
【算法基础篇】(四十四)数论之欧拉定理与扩展欧拉定理深度解析:从降幂到超大规模幂运算
c++·算法·蓝桥杯·算法竞赛·欧拉定理·扩展欧拉定理·acm/icpc