• LeetCode 414. Third Maximum Number


    414. Third Maximum Number (第三大的数)

    链接:

      

      https://leetcode-cn.com/problems/third-maximum-number/

    题目:

      

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

      示例 1:

      输入: [3, 2, 1]

      输出: 1

      解释: 第三大的数是 1.
      示例 2:

      输入: [1, 2]

      输出: 2

      解释: 第三大的数不存在, 所以返回最大的数 2 .
      示例 3:

      输入: [2, 2, 3, 1]

      输出: 1

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

    思路:

      简单题目挖了坑,不能直接用排序函数运算,O(n)就只能遍历一遍,所以设置one,two,three表示第一大第二大第三大三个数,遍历比较即可。这里还有两个坑,第一个是存在相同数字的可能性,这个在开始时比较一下就行了。另外一个是,输入里面有-2147483648,需要考虑一下,加一个flag表示即可。遍历完成,如果数组中不相同的数大于等于3个,那么输出three,不然输出one。

    代码:

     1 public static int thirdMax(int[] nums) 
     2     {
     3         if(nums.length==1)
     4             return nums[0];
     5         else if(nums.length==2)
     6             return Math.max(nums[0], nums[1]);
     7         int one=Integer.MIN_VALUE;
     8         int two=Integer.MIN_VALUE;
     9         int three=Integer.MIN_VALUE;
    10         int tnum=0;
    11         boolean flag=true;
    12         for(int i=0;i<nums.length;i++)
    13         {
    14             if(flag&&nums[i]==Integer.MIN_VALUE)
    15             {    
    16                 tnum++;
    17                 flag=false;
    18             }
    19             if(one == nums[i]||two == nums[i]||three == nums[i])
    20                 continue;
    21             
    22             tnum++;
    23             if(nums[i]>one)
    24             {
    25                 three=two;
    26                 two=one;
    27                 one=nums[i];                
    28             }
    29             else if(nums[i]>two)
    30             {
    31                 three=two;
    32                 two=nums[i];                
    33             }
    34             else if(nums[i]>three)
    35             {
    36                 three=nums[i];                
    37             }    
    38         }
    39         if(tnum>=3)
    40             return three;
    41         else 
    42             return one;
    43     }
  • 相关阅读:
    强化训练1
    强化训练2
    变量的本质
    抽象层
    安装vs2015
    解决思路
    分析栈的缺点
    (转)使用yuicompressor-maven-plugin压缩js及css文件(二)
    (转)yuicompressor 与 maven结合,打包,压缩js,css (一)
    (转)Properties Editor为你解除通过native2ascii进行Unicode转码的烦恼
  • 原文地址:https://www.cnblogs.com/blogxjc/p/11118599.html
Copyright © 2020-2023  润新知