leetcode 414.第三大的数
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.第三大的数相关推荐
- Leetcode 414. 第三大的数(详解 C语言实现)
414. 第三大的数(点击查看原题) 给定一个非空数组,返回此数组中第三大的数.如果不存在,则返回数组中最大的数.要求算法时间复杂度必须是O(n). 示例 1: 输入: [3, 2, 1]输出: 1解 ...
- [Leetcode] 414. 第三大的数
题目描述: 给定一个非空数组,返回此数组中第三大的数.如果不存在,则返回数组中最大的数.要求算法时间复杂度必须是O(n). 示例 1: 输入: [3, 2, 1]输出: 1解释: 第三大的数是 1. ...
- LeetCode Algorithm 414. 第三大的数
414. 第三大的数 Ideas emmmm,内置排序算法YYDS,三行代码解决. Code C++ class Solution {public:int thirdMax(vector<int ...
- 【LeetCode】414. 第三大的数
给定一个非空数组,返回此数组中第三大的数.如果不存在,则返回数组中最大的数.要求算法时间复杂度必须是O(n). 示例 1: 输入: [3, 2, 1]输出: 1解释: 第三大的数是 1. 示例 2: ...
- 【LeetCode】414.第三大的数
题目描述 给定一个非空数组,返回此数组中第三大的数.如果不存在,则返回数组中最大的数.要求算法时间复杂度必须是O(n). 示例 示例 1: 输入: [3, 2, 1] 输出: 1 解释: 第三大的数是 ...
- 414. 第三大的数
给你一个非空数组,返回此数组中 第三大的数 .如果不存在,则返回数组中最大的数 方法一 首先将数组排序,然后通过集合去除重复的元素,最后进行一次判断,选择第三大元素还是最大元素 class Solut ...
- leetcode(3)——414. 第三大的数(C++中的 set,::作用符号,迭代器),628 三个数的最大乘积(sort函数的用法)
文章目录 前言 414 程序 疑惑 set ::在c++中什么意思 一.作用域符号: 二.全局作用域符号: 三.作用域分解运算符: C++ 迭代器 628 程序 疑惑 sort函数 前言 大佬的程序, ...
- ajax 最大链接数_leetcode之第三大的数
序 本文主要研究一下leetcode之第三大的数 题目 给定一个非空数组,返回此数组中第三大的数.如果不存在,则返回数组中最大的数.要求算法时间复杂度必须是O(n).示例 1:输入: [3, 2, 1 ...
- leetcode|第三大的数java题解
由于在面试作业帮.好未来侧开实习面试的时候都被问到了这道题,所以我就来写个题解吧 给你一个非空数组,返回此数组中 第三大的数 .如果不存在,则返回数组中最大的数. 示例 1: 输入:[3, 2, 1] ...
最新文章
- Java 多线程的基本方式
- TensorFlow实现案例汇集:代码+笔记
- 微软加入了面向Java的Cloud Foundry
- 一文理清HashMap的实现及细节
- vs连接oracle数据库报错,用VS连接oracle数据库时ORA-12504错误
- 通用时区:你应该知道的数据库时区知识
- iptables: Resource temporarily unavailable.问题
- Hexo中next主题的个性化配置
- 电子政务概论-课程形成性考核册
- SharePoint 2013 图文开发系列之InfoPath入门
- How To Convert DMG To ISO on Mac OSX, Windows and Linux
- 水泥行业超低排放政策频发,企业如何完成超低排放改造?
- 数据库MySQL入门-下
- dabo(达泊西汀)
- 淘宝直播赚佣金项目玩法
- 修改CAS的MD5加密规范
- JS File 和 Blob 是什么
- AttributeError: Can‘t get attribute ‘SPPF‘ on <module ‘models.common‘ from ‘/yolov5-5.0/models/commo
- 【杂篇 · 技巧】Typora 快捷键整理
- [cesium] 基于Cesium的动态泛光效果示例
热门文章
- ENSP实验十二——USG5500策略配置命令验证
- 龙山区计算机学校,龙山县城区中小学招生报名系统操作指南
- 功能测试用例设计方法、有那些,一一举例
- linux命令中service ntpd restart,Linux 时间同步 ntpd
- 【实施】畅捷通T+软件生产成本结转的理解
- 第5集丨理学对佛、道的复制
- Centos安装MySQL(RPM安装方式)
- 编程随想(更2015.11.13)
- 板式家具包装三步法_板式家具三合一连接件安装方法图解 安帝斯家具五金
- 5G——2019年MWC世界移动通讯展会最大热点!