Skip to content
This repository was archived by the owner on Aug 14, 2024. It is now read-only.

Latest commit

 

History

History
72 lines (52 loc) · 1.68 KB

414.md

File metadata and controls

72 lines (52 loc) · 1.68 KB

414. Third Maximum Number

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

Thinking Process

  1. Scan through the array, update the largest 3 numbers
  2. The trick is to use an Integer object to store the numbers, and skip values that already appear in the 3 largest numbers (making sure 3 largest numbers are distinct from one another)

Code

public class Solution {
    public int thirdMax(int[] nums) {
        Integer max = null;
        Integer max2 = null;
        Integer max3 = null;
        for(Integer num : nums){
            if(num.equals(max) || num.equals(max2) || num.equals(max3)) continue;
            if(max == null || num > max){
                max3 = max2;
                max2 = max;
                max = num;
            }else if(max2 == null || num > max2){
                max3 = max2;
                max2 = num;
            }else if(max3 == null || num > max3){
                max3 = num;
            }
        }
        return max3 == null ? max : max3;
    }
}

Complexity

  1. Time complexity is O(n) as the array is scanned exactly once
  2. Space complexity is O(1)