leetcode 414.第三大的数

题目描述

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

示例 1:

输入: [3, 2, 1]
输出: 1
解释: 第三大的数是 1.

示例 2:

输入: [1, 2]
输出: 2
解释: 第三大的数不存在, 所以返回最大的数 2 .

示例 3:

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

解题思路

方法一: 题目要求要使用时间复杂度为O(n),可以通过三次遍历的方法,依次查找,可以获得第三大的数。

class Solution {public:int thirdMax(vector<int>& nums) {int num1 = INT_MIN, num2 = INT_MIN, num3 = INT_MIN;// 最大的数for(int i=0; i<nums.size(); i++){if(num1 <= nums[i]){num1 = nums[i];}}// 第二大的数for(int i=0; i<nums.size(); i++){if((num1 != nums[i]) && (num2 <= nums[i])){num2 = nums[i];}}// 第三大的数,这里需要确定是否存在num3,如果存在,flag变为truebool flag = false;for(int i=0; i<nums.size(); i++){if((num1 != nums[i]) && (num2 != nums[i]) && (num3 <= nums[i])){num3 = nums[i];flag = true;}}return flag ? num3 : num1;}
};

方法二 创建一个数组,有顺序的存放三个数,遍历数组的过程中,不断的取更新数组中的元素;c++ stl中提供了set容器,系统会根据元素的值自动排序。

class Solution {public:int thirdMax(vector<int>& nums) {set<int> numsSet;// 不断更新set中的值for(int i=0; i<nums.size(); i++){numsSet.insert(nums[i]);if (numsSet.size() > 3){numsSet.erase(numsSet.begin());}}// set的长度小于3,返回最大值,长度等于3就返回最小值。if(numsSet.size() < 3){return *(--numsSet.end());}else{return *numsSet.begin();}}
};

简化代码(rbegin是反向迭代器)

class Solution {public:int thirdMax(vector<int>& nums) {set<int> numsSet(nums.begin(), nums.end());auto it = numsSet.rbegin();if(numsSet.size() < 3){return *numsSet.rbegin();}else{return *(++(++numsSet.rbegin()));}}
};

欢迎大家关注我的个人公众号,同样的也是和该博客账号一样,专注分享技术问题,我们一起学习进步

leetcode 414.第三大的数相关推荐

  1. Leetcode 414. 第三大的数(详解 C语言实现)

    414. 第三大的数(点击查看原题) 给定一个非空数组,返回此数组中第三大的数.如果不存在,则返回数组中最大的数.要求算法时间复杂度必须是O(n). 示例 1: 输入: [3, 2, 1]输出: 1解 ...

  2. [Leetcode] 414. 第三大的数

    题目描述: 给定一个非空数组,返回此数组中第三大的数.如果不存在,则返回数组中最大的数.要求算法时间复杂度必须是O(n). 示例 1: 输入: [3, 2, 1]输出: 1解释: 第三大的数是 1. ...

  3. LeetCode Algorithm 414. 第三大的数

    414. 第三大的数 Ideas emmmm,内置排序算法YYDS,三行代码解决. Code C++ class Solution {public:int thirdMax(vector<int ...

  4. 【LeetCode】414. 第三大的数

    给定一个非空数组,返回此数组中第三大的数.如果不存在,则返回数组中最大的数.要求算法时间复杂度必须是O(n). 示例 1: 输入: [3, 2, 1]输出: 1解释: 第三大的数是 1. 示例 2: ...

  5. 【LeetCode】414.第三大的数

    题目描述 给定一个非空数组,返回此数组中第三大的数.如果不存在,则返回数组中最大的数.要求算法时间复杂度必须是O(n). 示例 示例 1: 输入: [3, 2, 1] 输出: 1 解释: 第三大的数是 ...

  6. 414. 第三大的数

    给你一个非空数组,返回此数组中 第三大的数 .如果不存在,则返回数组中最大的数 方法一 首先将数组排序,然后通过集合去除重复的元素,最后进行一次判断,选择第三大元素还是最大元素 class Solut ...

  7. leetcode(3)——414. 第三大的数(C++中的 set,::作用符号,迭代器),628 三个数的最大乘积(sort函数的用法)

    文章目录 前言 414 程序 疑惑 set ::在c++中什么意思 一.作用域符号: 二.全局作用域符号: 三.作用域分解运算符: C++ 迭代器 628 程序 疑惑 sort函数 前言 大佬的程序, ...

  8. ajax 最大链接数_leetcode之第三大的数

    序 本文主要研究一下leetcode之第三大的数 题目 给定一个非空数组,返回此数组中第三大的数.如果不存在,则返回数组中最大的数.要求算法时间复杂度必须是O(n).示例 1:输入: [3, 2, 1 ...

  9. leetcode|第三大的数java题解

    由于在面试作业帮.好未来侧开实习面试的时候都被问到了这道题,所以我就来写个题解吧 给你一个非空数组,返回此数组中 第三大的数 .如果不存在,则返回数组中最大的数. 示例 1: 输入:[3, 2, 1] ...

最新文章

  1. Java 多线程的基本方式
  2. TensorFlow实现案例汇集:代码+笔记
  3. 微软加入了面向Java的Cloud Foundry
  4. 一文理清HashMap的实现及细节
  5. vs连接oracle数据库报错,用VS连接oracle数据库时ORA-12504错误
  6. 通用时区:你应该知道的数据库时区知识
  7. iptables: Resource temporarily unavailable.问题
  8. Hexo中next主题的个性化配置
  9. 电子政务概论-课程形成性考核册
  10. SharePoint 2013 图文开发系列之InfoPath入门
  11. How To Convert DMG To ISO on Mac OSX, Windows and Linux
  12. 水泥行业超低排放政策频发,企业如何完成超低排放改造?
  13. 数据库MySQL入门-下
  14. dabo(达泊西汀)
  15. 淘宝直播赚佣金项目玩法
  16. 修改CAS的MD5加密规范
  17. JS File 和 Blob 是什么
  18. AttributeError: Can‘t get attribute ‘SPPF‘ on <module ‘models.common‘ from ‘/yolov5-5.0/models/commo
  19. 【杂篇 · 技巧】Typora 快捷键整理
  20. [cesium] 基于Cesium的动态泛光效果示例

热门文章

  1. ENSP实验十二——USG5500策略配置命令验证
  2. 龙山区计算机学校,龙山县城区中小学招生报名系统操作指南
  3. 功能测试用例设计方法、有那些,一一举例
  4. linux命令中service ntpd restart,Linux 时间同步 ntpd
  5. 【实施】畅捷通T+软件生产成本结转的理解
  6. 第5集丨理学对佛、道的复制
  7. Centos安装MySQL(RPM安装方式)
  8. 编程随想(更2015.11.13)
  9. 板式家具包装三步法_板式家具三合一连接件安装方法图解 安帝斯家具五金
  10. 5G——2019年MWC世界移动通讯展会最大热点!