2021-09-21

给你一个非空数组,返回此数组中 第三大的数 。如果不存在,则返回数组中最大的数

法一: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];
            
           
        }
       
    }
};

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值