[leetcode]414. Third Maximum Number

[leetcode]414. Third Maximum Number


Analysis

everyday is the first day of your rest life—— [间歇性迷茫~]

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).
给定一个数组,找到数组中第三大的数,如果没有第三大的数,则输出第二大的数,以此类推。需要注意的是,数组中可能有重复的数字,所以先用set去重,然后排一下序就行了。

Implement

class Solution {
public:
    int thirdMax(vector<int>& nums) {
        set<int> num(nums.begin(), nums.end());
        set<int>::iterator it;
        vector<int> res;
        int tmp;
        for(it=num.begin(); it!=num.end(); it++){
            tmp = *it;
            res.push_back(tmp);
        }
        sort(res.begin(), res.end());
        int len = res.size();
        if(len<3)
            return res[len-1];
        else
            return res[len-3];
    }
};

下面是discussion里面一个大佬的解

int thirdMax(vector<int>& nums) {
    long long a, b, c;
    a = b = c = LLONG_MIN;
    for (auto num : nums) {
        if (num <= c || num == b || num == a) continue;
        c = num;
        if (c > b) swap(b, c);
        if (b > a) swap(a, b);
    }
    return c == LLONG_MIN ? a : c;
}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值