题目来源:https://leetcode-cn.com/problems/third-maximum-number/
大致题意:
返回数组中第三大的数,若没有则返回最大数
思路
简单直接地,就直接排序,然后遍历找到第三大的数(时间复杂度O(nlogn),空间复杂度O(logn))
不过看题解,用有序集合更好一些,记录一下有序集合的解法(时间复杂度O(n),空间复杂度O(1))
有序集合
使用 TreeSet 做 Java 的有序集合
遍历存储节点,当集合元素数量大于 3,删除最小元素即可
最后返回的时候判断集合元素数量是否等于 3,若不等于返回最大值
代码:
// 有序集合解法
public int thirdMax_TreeSet(int[] nums) {
TreeSet<Integer> treeSet = new TreeSet<Integer>();
for (int num : nums) {
// 添加元素入集合
treeSet.add(num);
// 数量大于三,删除最小元素
if (treeSet.size() > 3) {
treeSet.remove(treeSet.first());
}
}
return treeSet.size() == 3 ? treeSet.first() : treeSet.last();
}
收获
Java 有序集合可以使用 TreeSet,默认升序
用法:
- add(),添加元素
- size()
- remove()
- first()
- last()