给你一个非空数组,返回此数组中 第三大的数 。如果不存在,则返回数组中最大的数
法一:vector转set 再转回去。set能去除重复元素。
class Solution {
public:
int thirdMax(vector<int>& nums) {
//将 vector 转换为 set,set 数据结构自动去重
set<int>s(nums.begin(), nums.end());
//再将 set 转换为 vector 进行使用
nums.assign(s.begin(), s.end());
sort(nums.begin(),nums.end());
int n = nums.size();
if(n<3) return nums[n-1];
return nums[n-3];
}
};
法二:用三值数组,过程比较繁琐
class Solution {
public:
int thirdMax(vector<int>& nums) {
int three[3];
if(nums.size()==1)return nums[0];
if(nums.size()==2){
return max(nums[0],nums[1]);
}else{
three[0]=nums[0];
three[1]=nums[1];
three[2]=nums[2];
sort(three,three+3);
for(int i=2;i<nums.size();i++){
if(nums[i]>three[2]){
three[0]=three[1];
three[1]=three[2];
three[2]=nums[i];
}else if(nums[i]<three[2]&&nums[i]>three[1]){
three[0]=three[1];
three[1]=nums[i];
}else if(nums[i]<three[1]&&nums[i]>three[0]){
three[0]=nums[i];
}else if(nums[i]<three[0]){
if(three[0]==three[1]){
three[0]=nums[i];
}
}
}
if(three[0]==three[1]||three[0]==three[2]||three[2]==three[1]||three[0]==three[1]==three[2]){
return three[2];
}
return three[0];
}
}
};