概述
【414简单】第三大的数(2021.10.6)
1. 问题描述
给你一个非空数组,返回此数组中第三大的数。如果不存在,返回数组中最大的数。
示例1:
输入:[3, 2, 1]
输出:1
解释:第三大的数是 1 。
示例2:
输入:[1, 2]
输出:2
解释:第三大的数不存在, 所以返回最大的数 2 。
示例3:
输入:[2, 2, 3, 1]
输出:1
解释:注意,要求返回第三大的数,是指在所有不同数字中排第三大的数。
此例中存在两个值为 2 的数,它们都排第二。在所有不同数字中排第三大的数为 1 。
提示:
- 1 < = n u m s . l e n g t h < = 1 0 4 1 <= nums.length <= 10^4 1<=nums.length<=104
- − 2 31 < = n u m s [ i ] < = 2 31 − 1 -2^{31} <= nums[i] <= 2^{31} - 1 −231<=nums[i]<=231−1
2. 解题思路
对数组进行遍历,记录其中第一、第二、第三大的数,并实时更新。
==注意:==数组中可能会出现INT_MIN
,所以单纯使用INT_MIN
来表示最大的三个数的初始值是不够的,需要有个flag
标志位,用来判断thirdMax
的值是不是更新得到的INT_MIN
。
3.代码
class Solution {
public:
int thirdMax(vector<int>& nums) {
int max = INT_MIN, secondMax = INT_MIN,thirdMax = INT_MIN;
// falg和f用于作为标志位
int flag = 0;
bool f = false;
for(auto num: nums) {
if (num == INT_MIN&&!f) {
flag++;
f = true;
}
if(num > max) {
flag++;
thirdMax = secondMax;
secondMax = max;
max = num;
} else if(num < max && num > secondMax) {
flag++;
thirdMax = secondMax;
secondMax = num;
} else if(num < secondMax && num > thirdMax) {
flag++;
thirdMax = num;
}
}
return flag >= 3 ? thirdMax : max;
}
};
4. 复杂度
时间复杂度:O(n),n表示数组的长度
最后
以上就是虚拟万宝路为你收集整理的【414简单】第三大的数的全部内容,希望文章能够帮你解决【414简单】第三大的数所遇到的程序开发问题。
如果觉得靠谱客网站的内容还不错,欢迎将靠谱客网站推荐给程序员好友。
本图文内容来源于网友提供,作为学习参考使用,或来自网络收集整理,版权属于原作者所有。
发表评论 取消回复