[Leetcode学习]Third Maximum Number(第三大数)

问题:

难度easy

说明:

从一个输入的数组里面找到,第三个是数组内最大的数字,如果数组长度小于3,就返回第一最大的数字。

输入输出案例:

// 1是第三个数组内最大的
Input: [3, 2, 1]
Output: 1

// 因为没有第三个,所以返回2,数组内最大的
Input: [1, 2]
Output: 2

我的代码:

想过用hash排序或者用minstack那种解法,不过都没结果,还只能是固定的解题思路。来三个变量,然后判断处理,不过坏处就是如果题目改成求第N个最大数,变量会不会太多(用数组似乎也可以)。

class Solution {
     public int thirdMax(int[] nums) {
        // 命名三个变量,因为long可以概括int取值范围,所以使用long
        long max = Long.MIN_VALUE;
        long temp01 = Long.MIN_VALUE;
        long temp02 = Long.MIN_VALUE;

        // 进行区分(temp02, temp01), (temp01, max),(max, + ∞)
        for(int i = 0;i < nums.length;i ++) {
            int n = nums[i];
            if(max < n) {
                temp02 = temp01;
                temp01 = max;
                max = nums[i];
            } else if(temp01 < n && max > n) {
                temp02 = temp01;
                temp01 = nums[i];
            } else if(temp02 < n && temp01 > n) {
                temp02 = nums[i];
            }
        }

        // 检查temp02是否未赋值,或者temp02和temp01未赋值
        return (temp02 == Long.MIN_VALUE || temp02 == temp01) ? (int)max : (int)temp02;
    }
}

和别人没什么特别解题思路。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值