获取数组中第三大的数
题目:给你一个非空数组,返回此数组中 第三大的数 。如果不存在,则返回数组中最大的数。
示例1:
输入:[3, 2, 1]
输出:1
解释:第三大的数是 1 。
示例2:
输入:[1, 2]
输出:2
解释:第三大的数不存在, 所以返回最大的数 2 。
示例3:
输入:[2, 2, 3, 1]
输出:1
解释:注意,要求返回第三大的数,是指在所有不同数字中排第三大的数。
此例中存在两个值为 2 的数,它们都排第二。在所有不同数字中排第三大的数为 1
提示:
1 <= nums.length <= 104
-231 <= nums[i] <= 231 - 1
思路
- 我们可以遍历数组,同时用一个有序集合来维护数组中前三大的数。具体做法是每遍历一个数,就将其插入有序集合,若有序集合的大小超过 3,就删除集合中的最小元素。这样可以保证有序集合的大小至多为3,且遍历结束后,若有序集合的大小为3,其最小值就是数组中第三大的数;若有序集合的大小不足3,那么就返回有序集合中的最大值。
- java中Treeset可以实现对添加的数进行排序存储。
class Solution {
public int thirdMax(int[] nums) {
TreeSet<Integer> s = new TreeSet<Integer>();
for (int num : nums) {
s.add(num);
if (s.size() > 3) {
s.remove(s.first());//将第一个数移出
}
}
return s.size() == 3 ? s.first() : s.last();
}
}