(LeetCode每日一刷27) 第三大的数

题目描述:

给定一个非空数组,返回此数组中第三大的数。如果不存在,则返回数组中最大的数。要求算法时间复杂度必须是O(n)。

示例:

示例 1:

输入: [3, 2, 1]

输出: 1

解释: 第三大的数是 1.

示例 2:

输入: [1, 2]

输出: 2

解释: 第三大的数不存在, 所以返回最大的数 2 .

示例 3:

输入: [2, 2, 3, 1]

输出: 1

解释: 注意,要求返回第三大的数,是指第三大且唯一出现的数。
存在两个值为2的数,它们都排第二。

我提交的代码:

class Solution {
public:
    int thirdMax(vector<int>& nums) {
        sort(nums.begin(),nums.end());
        if(nums.size() < 3){
            return nums[nums.size()-1];
        }
        decltype(nums.size()) i;
        int cout = 0;
        for (i = nums.size() - 1; i >= 1; --i){
            if(nums[i] > nums[i-1]){
                cout++;
                if(cout == 2){
                    return nums[i-1];
                }
            }
        }
        if(cout != 2){
            return nums[nums.size()-1];
        }
    }
};

猜你喜欢

转载自blog.csdn.net/songsong2017/article/details/84645934