問題描述:
給定一個非空數組,返回此數組中第三大的數。如果不存在,則返回數組中最大的數。要求算法時間複雜度必須是O(n)。
示例:
示例 1:
輸入: [3, 2, 1]
輸出: 1
解釋: 第三大的數是 1.
示例 2:
輸入: [1, 2]
輸出: 2
解釋: 第三大的數不存在, 所以返回最大的數 2 .
示例 3:
輸入: [2, 2, 3, 1]
輸出: 1
解釋: 注意,要求返回第三大的數,是指第三大且唯一出現的數。存在兩個值爲2的數,它們都排第二。
分析:
對一個只有3個元素的TreeSet進行分析,
- 如果大於三個元素就就把Set中的最小值remove掉。
- 最後如果Set中元素小於3就返回Set最大值,否則返回最小值。
代碼:
import java.util.*;
class Solution {
public int thirdMax(int[] nums) {
TreeSet<Integer> set = new TreeSet<>();
for(int num:nums){
set.add(num);
}
if(set.size()<3){
return set.last();
}else{
set.remove(set.last());
set.remove(set.last());
return set.last();
}
}
}