获取数组中第三大的数

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

获取数组中第三大的数

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

示例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();
    }
}
相关文章
|
6月前
从一个数组中拿到另一个数组中的值
从一个数组中拿到另一个数组中的值
|
6月前
|
机器学习/深度学习 算法 安全
【数组】【最长距离】使循环数组所有元素相等的最少秒数
【数组】【最长距离】使循环数组所有元素相等的最少秒数
【数组】【最长距离】使循环数组所有元素相等的最少秒数
|
6月前
|
C++ 索引
C++ 获取数组大小、多维数组操作详解
本文介绍了如何获取数组的大小和使用`sizeof()`运算符。`sizeof()`返回数组所占字节数,而非元素个数。要获取元素个数,需除以单个元素的大小。此外,文章展示了如何使用`sizeof()`遍历数组,包括多维数组。多维数组是数组的数组,可用来表示网格。文中以战舰游戏为例说明了多维数组的应用。最后提到了微信公众号`Let us Coding`以获取更多内容。
102 0
定义一个包含10个整数元素的数组,初始值由用户给定。找出数组中的最大数并连同下标一起输出。
定义一个包含10个整数元素的数组,初始值由用户给定。找出数组中的最大数并连同下标一起输出。
231 0
|
JavaScript
js获取数组中最大值
js获取数组中最大值
78 0
|
前端开发 JavaScript
Javascript获取数组中的最大值和最小值方法汇总
方法一  sort()方法 b-a从大到小,a-b从小到大 var max2 = arr.sort(function(a,b){     return b-a; })[0]; console.log(max2)   方法二 //最小值 Array.
1400 0
获取数组的度
获取数组的度(算法题)
Java数组中找出两个相加等于某个值的数据下标
Java数组中找出两个相加等于某个值的数据下标
Java数组中找出两个相加等于某个值的数据下标
VB编程:UBound获取数组上限;LBound获取数组下限-25
VB编程:UBound获取数组上限;LBound获取数组下限-25
111 0