思路:红黑树
    维护一个只有3个元素的TreeSet,如果大于三个元素就就把Set中的最小最小值remove掉。
    最后如果Set中元素小于3就返回Set最大值,否则返回最小值。
    时间复杂度: O(n * log3) == O(n)

    代码:

    1. class Solution {
    2. public int thirdMax(int[] nums) {
    3. if (nums == null || nums.length == 0) throw new RuntimeException("error");
    4. TreeSet<Integer> set = new TreeSet<>();
    5. for (Integer elem : nums) {
    6. set.add(elem);
    7. if (set.size() > 3) set.remove(set.first());
    8. }
    9. return set.size() < 3 ? set.last() : set.first();
    10. }}