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.

Solution: Using Quick Sort

Solution: Keep track of the first, second and third largest number

Note: We need to use long int to save the number, cause there might be INT_MAX and INT_MIN in the array.

int thirdMax(vector<int>& nums) {
    long first = LONG_MIN, second = LONG_MIN, third = LONG_MIN;
    for (auto num: nums) {
        if (num > first) {
            third = second;
            second = first;
            first = num;
        } else if (num < first && num > second) {
            third = second;
            second = num;
        } else if (num < second && num > third) {
            third = num;
        }            
    }
    return third == LONG_MIN ? first : third;
}

Solution: Using set

Set will save the mebers in ascending order.

int thirdMax(vector<int>& nums) {
    set<int> top3;
    for (const int& num : nums) {
        top3.insert(num);
        if (top3.size() > 3) {
            top3.erase(top3.begin());
        }
    }
    return top3.size() == 3 ? *(top3.begin()) : *(top3.rbegin());
}

results matching ""

    No results matching ""