leetCode-Third Maximum Number

来源:互联网 发布:苏州淘宝模特招聘 编辑:程序博客网 时间:2024/05/21 22:45

Description:
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: 1Explanation: The third maximum is 1.

Example 2:

Input: [1, 2]Output: 2Explanation: The third maximum does not exist, so the maximum (2) is returned instead.

Example 3:

Input: [2, 2, 3, 1]Output: 1Explanation: Note that the third maximum here means the third maximum distinct number.Both numbers with value 2 are both considered as second maximum.

Solution:

class Solution {      public int thirdMax(int[] nums) {        Integer max1 = null;        Integer max2 = null;        Integer max3 = null;        //注意不同元素        for (Integer n : nums) {            if (n.equals(max1) || n.equals(max2) || n.equals(max3)) continue;            if (max1 == null || n > max1) {                max3 = max2;                max2 = max1;                max1 = n;            } else if (max2 == null || n > max2) {                max3 = max2;                max2 = n;            } else if (max3 == null || n > max3) {                max3 = n;            }        }        return max3 == null ? max1 : max3;    }}

Best Solution:

class Solution {    public int thirdMax(int[] nums) {        long first = Long.MIN_VALUE;        long second =Long.MIN_VALUE;        long third = Long.MIN_VALUE;        for(int i = 0; i< nums.length; i++)        {            if(nums[i] > first)            {                third = second;                second = first;                first = nums[i];            }else if(nums[i] > second && nums[i] < first)            {                third = second;                second = nums[i];            }else if( nums[i] > third && nums[i] < second)            {                third = nums[i];            }        }        return third == Long.MIN_VALUE ? (int)first : (int)third;    }}

总结:设置3个数,遍历数组划分数据,需要注意的是每次添加的是不同的数据。