思路:红黑树
维护一个只有3个元素的TreeSet,如果大于三个元素就就把Set中的最小最小值remove掉。
最后如果Set中元素小于3就返回Set最大值,否则返回最小值。
时间复杂度: O(n * log3) == O(n)
代码:
class Solution {
public int thirdMax(int[] nums) {
if (nums == null || nums.length == 0) throw new RuntimeException("error");
TreeSet<Integer> set = new TreeSet<>();
for (Integer elem : nums) {
set.add(elem);
if (set.size() > 3) set.remove(set.first());
}
return set.size() < 3 ? set.last() : set.first();
}}