leetcode Third Maximum Number 第三大的数

来源:互联网 发布:mac win7激活工具 编辑:程序博客网 时间:2024/05/22 01:50

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).
题意:给定非空数组,找出第三大的数,若不存在,则输出最大数,要求时间复杂度位O(n)。
1、定义三个变量,分别存储前三大的数,初始化有漏洞,测试用例最小到INT_MIN,故初始化位LLONG_MIN。

class Solution {public:    int thirdMax(vector<int>& nums) {        long long max = LLONG_MIN;        long long second = max;        long long third = max;        for (int i = 0; i < nums.size(); ++i) {            if (max < nums[i]) {                third = second;                second = max;                max = nums[i];            }            else if (second < nums[i] && max > nums[i]) {                third = second;                second = nums[i];            }            else if (third <= nums[i] && second > nums[i]) {                third = nums[i];            }        }        if (third != LLONG_MIN) return third;        return max;    }};

2、利用set容器,自动排序

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