https://leetcode-cn.com/problems/third-maximum-number/
给定一个非空数组,返回此数组中第三大的数。如果不存在,则返回数组中最大的数。要求算法时间复杂度必须是O(n)。
输入: [3, 2, 1]
输出: 1
解释: 第三大的数是 1.
输入: [1, 2]
输出: 2
解释: 第三大的数不存在, 所以返回最大的数 2
class Solution {
static class MyCompar implements Comparator<Integer>{
@Override
public int compare(Integer o1, Integer o2) {
if (o2 < 0 && o1 >= 0){
return o2;
}
if (o1 < 0 && o2 >=0){
return o2;
}
return o2 - o1;
}
}
public int thirdMax(int[] nums) {
if (nums.length == 0){
return 0;
}
Queue<Integer> queue = new PriorityQueue<>(new MyCompar());
for (int x : nums){
if (!queue.contains(x)){
queue.add(x);
}
}
int ret = 0;
if (queue.size() == 2 || queue.size() == 1){
ret = queue.peek();
}else {
for (int i = 0; i < 3; i++) {
ret = queue.poll();
}
}
return ret;
}
}

被折叠的 条评论
为什么被折叠?



