414. 第三大的数

【题目】

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

【示例】

示例 1:

输入:[3, 2, 1]输出:1解释:第三大的数是 1 。

示例 2:

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

示例 3:

输入:[2, 2, 3, 1]输出:1解释:注意,要求返回第三大的数,是指在所有不同数字中排第三大的数。

【解析】

1. 由题目可知该数组为非空数组,不存在返回空的情况;

2.本来我看见题目说第三大的数如果存在就输出,不存在就输出最大的值,以为应该先队数组的长度进行判断,分成数组长度小于3和其他类,后来发现不需要;不管数组多长,直接对数组进行排序去重,最后对结果容器数组进行长度判断就可以;

3.要查找数组中第三大的元素:首先应该对数组进行排序,直接使用Java自带的Arrays.sort()方法进行顺序排序;

4.由示例 3 可以看出同样大小的元素会进行跳过,不会用于排序,所以要对数组进行去重操作;

5.将去重之后的元素添加到一个新的数组中(此时新数组没有重复元素并且是顺序排序),然后对新数组判断是否小于 3 :如果小于 3 ,则输出最大值 , 否则输出第三大元素;

【代码】

class Solution {
    public int thirdMax(int[] nums) {
        //将数组进行升序排序
        Arrays.sort(nums);
        //创建一个新的数组用于存储去重后的数据
        ArrayList<Integer> list = new ArrayList<>();
        int num = 0;
        //去重
        for(int i=0; i<nums.length; i++){
            //看是否遍历到了最后一个元素,防止索引越界
            //不是最后一个元素,所以都与后一个元素比较,看是否相同
            //如果遍历到了最后一个还与后一个元素进行比较就会造成索引越界
            if(i < nums.length-1){
                if(nums[i] != nums[i+1]){
                    list.add(nums[i]);
                    num++;
                }
            }
            //遍历到了最后一个元素,之间将其添加到新数组中
            //因为如果前一个元素与它相同,那么前一个元素不会添加到数组中,则将它添加;
            //不相同也是添加
            else{
                list.add(nums[i]);
            }
        }
        //判断新数组长度是否小于3
        //大于等于3则输出第三大的数 
        if(list.size() >= 3){
            return list.get(list.size() - 3);
        }
        //小于3则输出最大值
        else{
            return list.get(list.size()-1);
        }
       

    }
}

【复杂度分析】

时间复杂度:O(nlogn),其中 n 是数组 nums 的长度。这是因为代码中使用了 Arrays.sort() 方法对数组进行排序,其时间复杂度为 O(nlogn)。其他操作的时间复杂度都小于或等于 O(n),因此总的时间复杂度为 O(nlogn)。

空间复杂度:O(n),其中 n 是数组 nums 的长度。这是因为代码中创建了一个新的 ArrayList 用于存储去重后的数据,其空间复杂度为 O(n)。其他变量的空间复杂度都小于或等于 O(1),因此总的空间复杂度为 O(n)。

  • 13
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值