第三大的数

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

示例 1:
输入: [3, 2, 1]
输出: 1
第三大的数是 1

示例 2:
输入: [1, 2]
输出: 2
第三大的数不存在, 所以返回最大的数 2

示例 3:
输入: [2, 2, 3, 1]
输出: 1
注意,要求返回第三大的数,是指第三大且唯一出现的数。
存在两个值为2的数,它们都排第二。

思路

1.如果数组的长度是1的话,那么直接返回这个数字
2.如果数组的长度是2的话,那么返回的是两个数比较大的那个数
3.如果长度大于等于3的话,先把这个数组从小到大排列,直接调用Array.sort()这个方法,我们就得到了有序数组。
之后从后往前分别找到max1(第一大),max2(第二大),max3(第三大)的数字。
如果max3不存在那就返回max1,如果max3存在那就返回max3。

值得注意的一点是,我设置了一个布尔型变量,初始值是flase,这个布尔型变量的作用就是看max3是否存在,如果max3存在的话,就会变成true。

代码详情如下:

代码
class Solution {
    public int thirdMax(int[] nums) {
        if(nums.length==1){
            return nums[0];
        }
        if(nums.length==2){
            return Math.max(nums[0],nums[1]);
        }
        Arrays.sort(nums);
        boolean f=false;//判断max3的时候用到的
        int len=nums.length-1;
            int max1=nums[len];
            int max2=0;
            int max3=0;
            int i=0;
        for(i=len-1;i>=0;i--){
            if(nums[i]==max1){
                continue;
            }else{
                max2=nums[i];
                break;
            }
        }
        for(int j=i-1;j>=0;j--){
            if(nums[j]==nums[i]){
                continue;
            }else{
                f=true;
                max3=nums[j];
                break;
            }
        }
        if(f){
            return max3;
        }else{
            return max1;
        }
    }
}
总结

这个sort方法很好用。sort()是Java中用来排序的一个方法,并且时间复杂度和空间复杂度相对都不会过高。
数字类型,从小到大排序(浮点型也一样)

int[] arr={'2','6','4','1'};
Arrays.sort(arr);
//这样arr会成为一个从小到大的顺序数组
//arr会是{'1','2','4','6'}
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值