获取数组中第三大的数

简介: 获取数组中第三大的数

获取数组中第三大的数

题目:给你一个非空数组,返回此数组中 第三大的数 。如果不存在,则返回数组中最大的数。

示例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();
    }
}
相关文章
|
5月前
|
存储
数组的初识
数组的初识
|
5月前
|
存储 算法 C++
c++数组详细介绍(二)
c++数组详细介绍(二)
97 0
|
5月前
|
存储 C++ 索引
C++数组
C++数组
48 0
|
5月前
|
存储 搜索推荐 程序员
C++ 数组
C++ 数组
39 0
|
5月前
|
存储 C++ 索引
c++数组
c++数组
35 1
|
5月前
数组练习2
数组练习2。
26 2
|
5月前
|
存储 人工智能 算法
4.为何数组下表从0开始
4.为何数组下表从0开始
60 1
|
5月前
|
机器学习/深度学习 人工智能 JavaScript
数组练习
数组练习。
33 0
|
10月前
|
存储 编译器 程序员
数组详解
数组详解
63 0
|
11月前
|
机器学习/深度学习 Java
【数组的使用】
【数组的使用】
41 0