第三大的数 | LeetCode刷题笔记

427 阅读2分钟

这是我参与8月更文挑战的第22天,活动详情查看:8月更文挑战


相关文章

LeetCode刷题汇总:LeetCode刷题

一、题目描述


第三大的数

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

从简单题目开始刷,锻炼自己的思维能力,为面试准备~

二、思路分析


  • 看看题目的示例,我们来理一理这个思路~

  • 示例 1:

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

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

    输入:[2, 2, 3, 1]
    输出:1
    解释:注意,要求返回第三大的数,是指在所有不同数字中排第三大的数。
    此例中存在两个值为 2 的数,它们都排第二。在所有不同数字中排第三大的数为 1
  • 先将数组降序排序

  • 再去重

  • 判断数组长度是否小于3

  • 小于3的话返回最大值,即第一个数

  • 反之,返回第三大的数

三、AC 代码


  • 降序破解法:

    class Solution {
        public int thirdMax(int[] nums) {
            //int数组转integer数组
            IntStream stream = Arrays.stream(nums);
            Stream<Integer> integerStream = stream.boxed();
            Integer[] integers = integerStream.toArray(Integer[]::new);
            List<Integer> result = new ArrayList<>();
            //降序排序
            Arrays.sort(integers, Collections.reverseOrder());
            for (int num : integers) {
                if (!result.contains(num)){
                    result.add(num);
                }
            }
            if (result.size()<3){
                return result.get(0);
            }
            return result.get(2);
    ​
        }
    }
    
    • image-20210822200017048.png
    • 个人感觉我这种解法除了转换比较麻烦,思路还是蛮清晰的嘛!
  • 巧用TreeSet破解:

    class Solution {
        public int thirdMax(int[] nums) {
            TreeSet<Integer> set=new TreeSet();
            for(int i:nums){
                set.add(i);
                if(set.size()>3){
                     set.pollFirst();
                }
            }
            if(set.size()<3){
                return set.pollLast();
            }else{
                return set.pollFirst();
            }
    ​
        }
    }
    
    • image-20210822195120192.png
    • 把元素都插入TreeSet里面,他会自动升序排列
    • 在插入过程中,一直维护一个长度为3的,如果大于3,那么删除最小的那个
    • 插入完毕
    • 没有第三个 就返回最后一个(最大值) ,否则返回第一个(一直维护第一个是倒数第三大的)。

四、总结

  • 解题思路千千万,不管是本办法还好,还是奇思妙想的解法,能解决就是好办法!白猫黑猫能抓老鼠的猫就是好猫!
  • 这里列几个LeetCode的其他大神的解法作为参考!
  • 点击跳转:循环解法
  • 点击跳转:JAVA 一行

**路漫漫其修远兮,吾必将上下求索~ **如果你认为i博主写的不错!写作不易,请点赞、关注、评论给博主一个鼓励吧~hahah