力扣leetcode [414. 第三大的数] 一眼一看就懂的思路和代码

关于数组遍历的题剩下一道了,加油!各位!

> Problem: [414. 第三大的数]

[TOC]

第一种方法,比较困难的方法!

# 思路

> 在看题的时候,我想到了利用三个int型数进行记录最大的三个不重复数,但是我呢思路比较笨,没有想到一些更好的解法,在做完题,看别人的思路后可以用Integer型变量,因为Integer型变量值可以为null。

这种解法,我也看了解题思路后得到的,当时我不懂TreeSet类是一个啥东西,看了API文档后明白了,知道了这个类的用途,啥的,所以有了下面这个思路,不过在这个思路之前也有个用TreeSet类做的一个算法,但是比较繁琐!

# 解题方法

> 知道里面有两个方法:poolFirst() 返回最小的数,并且删除,若集合为空,返回null

poolLast() 返回最大的数,并且删除,若集合为空,返回null

进行程序编写的

# Code

```Java []

class Solution {

    public int thirdMax(int[] nums) {

        TreeSet integers = new TreeSet<>();

        for (int num : nums) {

            integers.add(num);

        }

        Integer a = integers.pollLast();



        Integer b = integers.pollLast();

        while (Objects.equals(a, b)){

            b = integers.pollLast();

        }

        if (b == null)

            return a;

        Integer c = integers.pollLast();

        while (b.equals(c)){

            c = integers.pollLast();

        }

        if (c == null){

            return a;

        }

        return c;

    }

}

```

第二种方法:

在这个方法是我第一次想到的放法,但是第一次实现的时候没实现成功,没有这个简洁,但是在写这个代码的途中,当a == null 时,num>a 会发生错误,所以在解决这个问题的时候思考了很久,看到上面都定义为null,所以添加了一个a==null与num>a进行或运算,这个代码相当来说比较简单,希望你们能看懂,有问题评论区可以提问!

public int thirdMax(int[] nums) {
    Integer a = null;
    Integer b = null;
    Integer c = null;
    for (Integer num :nums){
        if (Objects.equals(num, a) || Objects.equals(num, b) || Objects.equals(num, c)) continue;
        if (a == null || num > a){
            c = b;
            b = a;
            a = num;
            continue;
        }
        if (b == null || num > b){
            c = b;
            b = num;
            continue;
        }
        if (c == null || num > c){
            c = num;
        }
    }
    if (c != null)
        return c;
    return a;
}

你可能感兴趣的:(笨小林做力扣,leetcode,算法,数据结构,java)