LeetCode-414 第三大的数

题目描述

给定一个非空数组,返回此数组中第三大的数。如果不存在,则返回数组中最大的数。要求算法时间复杂度必须是O(n)。

示例 1:

输入: [3, 2, 1]

输出: 1

解释: 第三大的数是 1.
示例 2:

输入: [1, 2]

输出: 2

解释: 第三大的数不存在, 所以返回最大的数 2 .
示例 3:

输入: [2, 2, 3, 1]

输出: 1

解释: 注意,要求返回第三大的数,是指第三大且唯一出现的数。
存在两个值为2的数,它们都排第二。

解题思路

利用C++ STL提供的set的有序特性,可以建立一个set。每当set里元素数量超过3时,就删除第一个最小的数,set又可以去重。

代码实现

#include<iostream>
#include<vector>
#include<set>

using namespace std;

class Solution {
public:
    int thirdMax(vector<int>& nums) {
        set<int> hash_set;
        for (auto& num : nums) {
            hash_set.insert(num);
            if (hash_set.size() > 3) {
                 hash_set.erase(*hash_set.begin());
            }
        }
        

        if (hash_set.size() < 3) return *hash_set.rbegin();
        else {
            return *hash_set.begin();
        }
    }
};

延伸

可以拓展到求第K大的数

©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容

  • 【题目描述】给定一个非空数组,返回此数组中第三大的数。如果不存在,则返回数组中最大的数。要求算法时间复杂度必须是O...
    1江春水阅读 401评论 0 0
  • 一、基础知识:1、JVM、JRE和JDK的区别:JVM(Java Virtual Machine):java虚拟机...
    杀小贼阅读 2,415评论 0 4
  • 个人学习批处理的初衷来源于实际工作;在某个迭代版本有个BS(安卓手游模拟器)大需求,从而在测试过程中就重复涉及到...
    Luckykailiu阅读 4,779评论 0 11
  • 一、Python简介和环境搭建以及pip的安装 4课时实验课主要内容 【Python简介】: Python 是一个...
    _小老虎_阅读 5,808评论 0 10
  • 官网 中文版本 好的网站 Content-type: text/htmlBASH Section: User ...
    不排版阅读 4,462评论 0 5