美文网首页算法
求出第三大的数,不存在则给出最大的数

求出第三大的数,不存在则给出最大的数

作者: mapleLeaf_X | 来源:发表于2020-03-13 17:12 被阅读0次
==== 题目要求====

(1)非空的整数数组;
(2)如果存在的话求出第三大的数,否则求出最大的数。
(3)时间复杂度要求在O(n);

Example 1:

Input: [3, 2, 1]
Output: 1
Explanation: The third maximum is 1.

Example 2:

Input: [1, 2]
Output: 2
Explanation: The third maximum does not exist, so the maximum (2) is returned instead.

Example 3:

Input: [2, 2, 3, 1]

Output: 1

Explanation: Note that the third maximum here means the third maximum distinct number.
Both numbers with value 2 are both considered as second maximum.

例子就直接引用LeetCode上边的了(嘿嘿)。

==== 解题思路 ====

从上述的例子和题目可以知道,有两个需要注意的点。
首先,要考虑是否存在第三大的数;
其次,<font color=#f00>第三大的数</font>,那么就必须是大于,而不是大于等于(像Example 3)。

清楚了上述的两个点,那么这个问题就不难。

解题步骤:
(1)将数组nums去重,得到新的数组newNums;
(2)判断newNums的长度,如果长度小于3,则返回数组的最大值,否则进行下一步;
(3.1)将数组排序(由大到小),直接返回newNums[2]。
(3.2)求出数组的最大值,然后将其删除,接着求最大值,再删除,最后求出最大值并将其返回。

在(2)的基础,有两种方法可以求解(3.1和3.2)。

3.1的js代码

/**
 * @param {number[]} nums
 * @return {number}
 */
var thirdMax = function(nums) {
    let set = new Set(nums);
    let newNums = [...set];
    let len = newNums.length;
    
    if(len < 3) {
        return Math.max(...newNums);
    }
    
    newNums.sort((x,y)=>{
        return y-x;
    });
    
    return newNums[2];
};

3.2的js代码

/**
 * @param {number[]} nums
 * @return {number}
 */
var thirdMax = function(nums) {
    let set = new Set(nums);
    let newNums = [...set];
    let len = newNums.length;
    
    if(len < 3) {
        return Math.max(...newNums);
    }
    
     for(let i = 0; i < 2; i++){
         let max = Math.max(...newNums);
         set.delete(max);
         newNums = [...set];
     }
     return Math.max(...newNums);
};
==== 总结 ====

到此,这个问题算是搞一个段落了,但是仍需努力。
在LeetCode上查看的时候,发现许多的人写出的算法比现在写的要优秀,可惜的是无法查看到他们的代码,革命尚未成功,仍需努力。
同时,如果大家有更好的、更优秀的解题方案或思路,望告之。

相关文章

  • 求出第三大的数,不存在则给出最大的数

    ==== 题目要求==== (1)非空的整数数组;(2)如果存在的话求出第三大的数,否则求出最大的数。(3)时间复...

  • 414-第三大的数

    第三大的数 题目 给定一个非空数组,返回此数组中第三大的数。如果不存在,则返回数组中最大的数。要求算法时间复杂度必...

  • 第三大的数

    给定一个非空数组,返回此数组中第三大的数。如果不存在,则返回数组中最大的数。要求算法时间复杂度必须是O(n)。 示...

  • 414. 第三大的数

    内容 给定一个非空数组,返回此数组中第三大的数。如果不存在,则返回数组中最大的数。要求算法时间复杂度必须是O(n)...

  • T414、第三大的数

    给定一个非空数组,返回此数组中第三大的数。如果不存在,则返回数组中最大的数。要求算法时间复杂度必须是O(n)。示例...

  • 414-第三大的数

    给定一个非空数组,返回此数组中第三大的数。如果不存在,则返回数组中最大的数。要求算法时间复杂度必须是O(n)。 时...

  • 414. 第三大的数

    给定一个非空数组,返回此数组中第三大的数。如果不存在,则返回数组中最大的数。要求算法时间复杂度必须是O(n)。 示...

  • [简单]414.第三大的数

    给定一个非空数组,返回此数组中第三大的数。如果不存在,则返回数组中最大的数。要求算法时间复杂度必须是O(n)。 此...

  • LeetCode 414. 第三大的数 Third Maximu

    【题目描述】给定一个非空数组,返回此数组中第三大的数。如果不存在,则返回数组中最大的数。要求算法时间复杂度必须是O...

  • 两数比大小

    给出两个数x和y,求出两数的大者

网友评论

    本文标题:求出第三大的数,不存在则给出最大的数

    本文链接:https://www.haomeiwen.com/subject/rhhanftx.html