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).

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.

注意,重复的数字不算。

这题本没啥难度,一个小tricky 就是用Integer 来初始化 max1, max2, ,max3, 因为Integer 可以被初始化成null 而不是 Integer.MIN_VALUE, 特别在比大小时候null 比 Integer.MIN_VALUE 有价值。
class Solution {
    public int thirdMax(int[] nums) {
        Integer max1, max2, max3; 
        max1 = null;
        max2 = null; 
        max3 = null;
        
        for(Integer num: nums){   
            if(num.equals(max1) || num.equals(max2) || num.equals(max3)) continue; 
            if(max1 ==null || num> max1){
                max3 = max2;
                max2 = max1;
                max1 = num;
            }  
            else if(max2 ==null || num>max2){
                max3 = max2;
                max2 = num;
            }
            else if(max3 ==null || num>max3){
                max3 = num;
            }
        }
        
       return max3 ==null? max1:max3;
        
    }
}

 

posted on 2019-01-15 03:13  KeepAC  阅读(106)  评论(0编辑  收藏  举报