Skip to content

414. Third Maximum Number

Given an integer array nums, return the third distinct maximum number in this array. If the third maximum does not exist, return the maximum number.

Example 1:

Input: nums = [3,2,1]
Output: 1
Explanation:
The first distinct maximum is 3.
The second distinct maximum is 2.
The third distinct maximum is 1.

Example 2:

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

Example 3:

Input: nums = [2,2,3,1]
Output: 1
Explanation:
The first distinct maximum is 3.
The second distinct maximum is 2 (both 2's are counted together since they have the same value).
The third distinct maximum is 1.

Constraints:

  • 1 <= nums.length <= 104
  • -231 <= nums[i] <= 231 - 1

Follow up: Can you find an O(n) solution?

Solution:

class Solution {
    public int thirdMax(int[] nums) {
        Integer first = null; 
        Integer second = null;
        Integer third = null;

        for (int num : nums){
            if (Objects.equals(num, first) || Objects.equals(num, second) || Objects.equals(num, third)){
                continue;
            }

            if (first == null || num > first){
                third = second;
                second = first;
                first = num;
            }else if (second == null || num > second){
                third = second;
                second = num;
            }else if (third == null || num > third){
                third = num;
            }
        }
        if (third != null){
            return third;
        }else {
            return first;
        }
    }
}

// TC: O(n)
// SC: O(1)

这题题意理解怪怪的.

要求在一个整数数组 nums 中找到第 3 大的不同数字,如果不存在第 3 大的数,就返回最大数.