LeetCode每日一题:第三大的数(No.414)

栏目: 编程工具 · 发布时间: 6年前

给定一个非空数组,返回此数组中第三大的数。
如果不存在,则返回数组中最大的数。
复制代码

示例:

输入: [3, 2, 1]
输出: 1
解释: 第三大的数是 1.

输入: [1, 2]
输出: 2
解释: 第三大的数不存在, 所以返回最大的数 2 .

输入: [2, 2, 3, 1]
输出: 1
解释: 注意,要求返回第三大的数,是指第三大且唯一出现的数。
存在两个值为2的数,它们都排第二。
复制代码

思考:

定义三个Integer对象max1,max2,max3来记录前三大的数,默认为null。
遍历数组,进行比较。
如果max1为空或者当前元素大于max1,说明当前元素是最大元素,则将原先的max2赋值给max3.max1赋给max2,当前元素赋给max1。
如果max1不为空且当前元素不大于max1,再比较,如果max2为空或者当前元素大于max2小于max1,说明当前元素是第二大元素。
所以将原max2赋给max3,当前元素赋值给max2。
如果max2不为空且当前元素不大于max2小于max1,再比较,如果max3为空或者当前元素大于max3小于max2(这里要先判断下max2不为空,防止出现重复元素时报错),就将当前元素赋值给max3。
最后判断max3是否为null,不为null返回max3,null则返回max1。
复制代码

实现:

class Solution {
    public int thirdMax(int[] nums) {
        if (nums.length == 1) {
            return nums[0];
        }
        if (nums.length == 2) {
            return Math.max(nums[0], nums[1]);
        }
        Integer max1 = null;
        Integer max2 = null;
        Integer max3 = null;
        for (int count = 0; count < nums.length; count++) {
            if (max1 == null || (nums[count] > max1)) {
                max3 = max2;
                max2 = max1;
                max1 = nums[count];
            } else if ((max2 == null || nums[count] > max2) && nums[count] < max1) {
                max3 = max2;
                max2 = nums[count];
            } else if ((max3 == null || nums[count] > max3) && max2 != null && nums[count] < max2) {
                max3 = nums[count];
            }
        }
        return max3 != null ? max3 : max1;
    }
}复制代码

以上所述就是小编给大家介绍的《LeetCode每日一题:第三大的数(No.414)》,希望对大家有所帮助,如果大家有任何疑问请给我留言,小编会及时回复大家的。在此也非常感谢大家对 码农网 的支持!

查看所有标签

猜你喜欢:

本站部分资源来源于网络,本站转载出于传递更多信息之目的,版权归原作者或者来源机构所有,如转载稿涉及版权问题,请联系我们

计算机程序设计艺术 第2卷 半数值算法(第3版)(英文影印版)

计算机程序设计艺术 第2卷 半数值算法(第3版)(英文影印版)

(美)Donald E.Knuth / 清华大学出版社 / 2002-09-01 / 83.0

计算机程序设计艺术:英文版(第2卷 半数值算法),ISBN:9787302058151,作者:(美)Donald E. Knuth著一起来看看 《计算机程序设计艺术 第2卷 半数值算法(第3版)(英文影印版)》 这本书的介绍吧!

JSON 在线解析
JSON 在线解析

在线 JSON 格式化工具

RGB HSV 转换
RGB HSV 转换

RGB HSV 互转工具

HEX CMYK 转换工具
HEX CMYK 转换工具

HEX CMYK 互转工具