MDGSF Software Engineer

[算法学习][leetcode] 414 Third Maximum Number

2017-08-31
mdgsf
Art

https://leetcode.com/problems/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.

题目翻译

题目解析

参考答案

set 遍历的时候,会从小到大。

#include <iostream>
#include <string>
#include <vector>
#include <set>
using namespace std;

class Solution {
public:
    int thirdMax(vector<int>& nums) {
        set<int> setThirdMax;
        vector<int>::iterator iter = nums.begin();
        while (iter != nums.end())
        {
            setThirdMax.insert(*iter);
            if (setThirdMax.size() > 3)
            {
                setThirdMax.erase(setThirdMax.begin());
            }
            ++iter;
        }

        return setThirdMax.size() == 3 ? *setThirdMax.begin() : *setThirdMax.rbegin();
    }
};

int main()
{
    vector<int> nums;
    nums.push_back(1);
    nums.push_back(2);
    nums.push_back(3);
    nums.push_back(4);

    Solution o;
    int iResult = o.thirdMax(nums);
    cout << iResult << endl;
    return 0;
}

weixingongzhonghao

Similar Posts

Comments