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.
思路:
1,排序(小到大)
2,判断数组中有几个数,若小于3,则直接输出最大的
3,设置一个数组变量temp,从最大的那个数开始放入数组中,若是放到第三个 ,则满足最大的第三个数,则返回
遍历结束,temp中还没有三个数的话,则返回temp[0],也就是数组中最大的数
#pragma once
#include<iostream>
#include<vector>
#include<algorithm>
using namespace std;
class Solution {
public:
int thirdMax(vector<int>& nums) {
vector<int> temp ;
//排序
sort(nums.begin(), nums.end());
if (nums.size() < 3)
{
return nums[nums.size() - 1];
}
for (int i = nums.size() - 1; i >= 0; i--)
{
//最大的数加入temp中
if (i == nums.size() - 1)
{
temp.push_back(nums[i]);
}
else
{
if (nums[i] < temp[temp.size() - 1])
{
temp.push_back(nums[i]);
//如果有3个值进入,则第三个就是第三大的数
if (temp.size() == 3)
{
return temp[temp.size()-1];
}
}
}
}
//没有第三个最大的,则返回最大的数
return temp[0];
}
};