zoukankan      html  css  js  c++  java
  • Leetcode: Third Maximum Number

    Given a non-empty array of integers, return the third maximum number in this array. If it does not exist, return the maximum number. The time complexity must be in O(n).
    
    Example 1:
    Input: [3, 2, 1]
    
    Output: 1
    
    Explanation: The third maximum is 1.
    Example 2:
    Input: [1, 2]
    
    Output: 2
    
    Explanation: The third maximum does not exist, so the maximum (2) is returned instead.
    Example 3:
    Input: [2, 2, 3, 1]
    
    Output: 1
    
    Explanation: Note that the third maximum here means the third maximum distinct number.
    Both numbers with value 2 are both considered as second maximum.

    My Solution:

     1 public class Solution {
     2     public int thirdMax(int[] nums) {
     3         long fstMax = Long.MIN_VALUE;
     4         long sndMax = Long.MIN_VALUE;
     5         long thirdMax = Long.MIN_VALUE;
     6         for (long each : nums) {
     7             if (each > fstMax) {
     8                 long temp = fstMax;
     9                 fstMax = each;
    10                 each = temp;
    11             }
    12             if (each<fstMax && each>sndMax) {
    13                 long temp = sndMax;
    14                 sndMax = each;
    15                 each = temp;
    16             }
    17             if (each<fstMax && each<sndMax && each>thirdMax) {
    18                 thirdMax = each;
    19             }
    20         }
    21         return thirdMax==Long.MIN_VALUE? (int)fstMax : (int)thirdMax;
    22     }
    23 }

    Highest votes in discussion

     1 public int thirdMax(int[] nums) {
     2         int max, mid, small, count;
     3         max = mid = small = Integer.MIN_VALUE;
     4         count = 0;  //Count how many top elements have been found.
     5 
     6         for( int x: nums) {
     7             //Skip loop if max or mid elements are duplicate. The purpose is for avoiding right shift.
     8             if( x == max || x == mid ) {
     9                 continue;
    10             }
    11 
    12             if (x > max) {
    13                 //right shift
    14                 small = mid;
    15                 mid = max;
    16 
    17                 max = x;
    18                 count++;
    19             } else if( x > mid) {
    20                 //right shift
    21                 small = mid;
    22 
    23                 mid = x;
    24                 count++;
    25             } else if ( x >= small) { //if small duplicated, that's find, there's no shift and need to increase count.
    26                 small = x;
    27                 count++;
    28             }
    29         }
    30 
    31         //"count" is used for checking whether found top 3 maximum elements.
    32         if( count >= 3) { 
    33             return small;
    34         } else {
    35             return max;
    36         }
    37     }
  • 相关阅读:
    【Linux】sed笔记
    【Linux】nl笔记
    【Kubernetes】架构全图
    【Linux】tar压缩解压缩笔记
    【Docker】初识与应用场景认知
    【Ubuntu】16.04网卡信息配置
    常用枚举类
    mysql生成主键
    eclipse下mybatis-generator-config插件
    tomcat下载镜像地址
  • 原文地址:https://www.cnblogs.com/EdwardLiu/p/6127925.html
Copyright © 2011-2022 走看看