leetcode414. 第三大的数

举报
兔老大 发表于 2021/04/28 01:03:31 2021/04/28
【摘要】 给定一个非空数组,返回此数组中第三大的数。如果不存在,则返回数组中最大的数。要求算法时间复杂度必须是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的情况。


  
  1. class Solution {
  2. public int thirdMax(int[] nums) {
  3. int first=Integer.MIN_VALUE;
  4. int second=Integer.MIN_VALUE;
  5. int third=Integer.MIN_VALUE;
  6. int sum=0;
  7. boolean bool=false;
  8. for(int i:nums){
  9. if(i==Integer.MIN_VALUE)bool=true;
  10. if(i==first || i==second || i==third)continue;
  11. if(i>first){
  12. third=second;
  13. second=first;
  14. first=i;
  15. sum++;
  16. }else if(i>second){
  17. third=second;
  18. second=i;
  19. sum++;
  20. }else if(i>third){
  21. third=i;
  22. sum++;
  23. }
  24. }
  25. if(sum>2){
  26. return third;
  27. }else if(sum==2 && bool){
  28. return third;
  29. }else{
  30. return first;
  31. }
  32. }
  33. }

 

文章来源: fantianzuo.blog.csdn.net,作者:兔老大RabbitMQ,版权归原作者所有,如需转载,请联系作者。

原文链接:fantianzuo.blog.csdn.net/article/details/104299904

【版权声明】本文为华为云社区用户转载文章,如果您发现本社区中有涉嫌抄袭的内容,欢迎发送邮件进行举报,并提供相关证据,一经查实,本社区将立刻删除涉嫌侵权内容,举报邮箱: cloudbbs@huaweicloud.com
  • 点赞
  • 收藏
  • 关注作者

评论(0

0/1000
抱歉,系统识别当前为高风险访问,暂不支持该操作

全部回复

上滑加载中

设置昵称

在此一键设置昵称,即可参与社区互动!

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。