414.第三大的数
[414. 第三大的数](https://leetcode-cn.com/problems/teemo-attacking/)
难度:简单
给你一个非空数组,返回此数组中 第三大的数 。如果不存在,则返回数组中最大的数。
示例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
**标签:**数组排序、数组去重、三目运算
思路:
直接sort排序取倒数第三个不行,因为有可能重复
class Solution {
public int thirdMax(int[] nums) {
//直接sort排序取倒数第三个不行,因为有可能重复
//Set的不重复性
Set<Integer> set = new HashSet<Integer>();
for(int i:nums) set.add(i);
List<Integer> list = new ArrayList<>(set);
Collections.sort(list);
//三目运算
return list.size()>=3?list.get(list.size()-3):list.get(list.size()-1);
}
}
复杂度:
n=timeSeries.length;
时间复杂度:set去重O(n),sort排序O(nlogn),所以总的为O(nlogn)
空间复杂度:set为O(n),list为O(n),总为O(n)