第三大的数(414-java)
给你一个非空数组,返回此数组中 第三大的数 。如果不存在,则返回数组中最大的数。
示例 1:
输入:[3, 2, 1] 输出:1 解释:第三大的数是 1 。 示例 2:
输入:[1, 2] 输出:2 解释:第三大的数不存在, 所以返回最大的数 2 。 示例 3:
输入:[2, 2, 3, 1] 输出:1 解释:注意,要求返回第三大的数,是指在所有不同数字中排第三大的数。 此例中存在两个值为 2 的数,它们都排第二。在所有不同数字中排第三大的数为 1 。
来源:力扣(LeetCode) 链接:https://leetcode-cn.com/problems/third-maximum-number 著作权归领扣网络所有。商业转载请联系官方授权,非商业转载请注明出处。
public class LC185_414_thirdMax {
public static int thirdMax(int[] nums) {
int n = nums.length;
long max_1 = Long.MIN_VALUE;
long max_2 = Long.MIN_VALUE;
long max_3 = Long.MIN_VALUE;
for (int num : nums) {
if (num == max_1 || num == max_2 || num == max_3) {
continue;
}
if (num >= max_1) {
max_3 = max_2;
max_2 = max_1;
max_1 = num;
} else if (num >= max_2) {
max_3 = max_2;
max_2 = num;
} else if (num >= max_3) {
max_3 = num;
}
}
if (max_3 == Long.MIN_VALUE) {
return (int) max_1;
} else {
return (int) max_3;
}
}
public static int thirdMax1(int[] nums) {
PriorityQueue<Integer> queue = new PriorityQueue<>();
for (Integer integer : nums) {
if (!queue.contains(integer)) {
queue.add(integer);
}
if (queue.size() > 3) {
queue.poll();
}
}
if (queue.size() == 3) {
return queue.peek();
} else {
int max = -1;
while (!queue.isEmpty()) {
max = queue.poll();
}
return max;
}
}
public static void main(String[] args) {
int[] ints = {2, 2, 3, 1,8,9,77};
System.out.println(thirdMax1(ints));
}
}
|