leetcode414. 第三大的数
【摘要】 给定一个非空数组,返回此数组中第三大的数。如果不存在,则返回数组中最大的数。要求算法时间复杂度必须是O(n)。
示例 1:
输入: [3, 2, 1]
输出: 1
解释: 第三大的数是 1. 示例 2:
输入: [1, 2]
输出: 2
解释: 第三大的数不存在, 所以返回最大的数 2 . 示例 3:
输入: [2, 2, 3, 1]
输出: 1
解释: ...
给定一个非空数组,返回此数组中第三大的数。如果不存在,则返回数组中最大的数。要求算法时间复杂度必须是O(n)。
示例 1:
输入: [3, 2, 1]
输出: 1
解释: 第三大的数是 1.
示例 2:
输入: [1, 2]
输出: 2
解释: 第三大的数不存在, 所以返回最大的数 2 .
示例 3:
输入: [2, 2, 3, 1]
输出: 1
解释: 注意,要求返回第三大的数,是指第三大且唯一出现的数。
存在两个值为2的数,它们都排第二。
思路1:见代码,分情况即可。记得特殊处理第三小正好是Integer.MIN_VALUE的情况。
-
class Solution {
-
public int thirdMax(int[] nums) {
-
int first=Integer.MIN_VALUE;
-
int second=Integer.MIN_VALUE;
-
int third=Integer.MIN_VALUE;
-
int sum=0;
-
boolean bool=false;
-
for(int i:nums){
-
if(i==Integer.MIN_VALUE)bool=true;
-
if(i==first || i==second || i==third)continue;
-
if(i>first){
-
third=second;
-
second=first;
-
first=i;
-
sum++;
-
}else if(i>second){
-
third=second;
-
second=i;
-
sum++;
-
}else if(i>third){
-
third=i;
-
sum++;
-
}
-
}
-
if(sum>2){
-
return third;
-
}else if(sum==2 && bool){
-
return third;
-
}else{
-
return first;
-
}
-
}
-
}
文章来源: fantianzuo.blog.csdn.net,作者:兔老大RabbitMQ,版权归原作者所有,如需转载,请联系作者。
原文链接:fantianzuo.blog.csdn.net/article/details/104299904
【版权声明】本文为华为云社区用户转载文章,如果您发现本社区中有涉嫌抄袭的内容,欢迎发送邮件进行举报,并提供相关证据,一经查实,本社区将立刻删除涉嫌侵权内容,举报邮箱:
cloudbbs@huaweicloud.com
- 点赞
- 收藏
- 关注作者
评论(0)