Leetcode 414. Third Maximum Number 第三大的数 解题报告

1 解题思想

这个问题是找第3大的数字,其实这个问题相对时间复杂度都不高,k-th-都可以O(n)完成,但是具体算法我记不得了。。。

这里我的解法比较原始,直接用三个位置来保存当前的top3,

这里有个问题就是:
1、他是不计算重复的,所以要保证插入的时候必须是大于top1,小于top1大于top2,小于top2大于top3的才可以
2、因为要求不够3个数的时候返回最大,而且他会使用int的边界值,不方便判断,所以直接使用三个long,并且初始化为long的最小值就好

然后就是挨个对比了

2 原题

Given a non-empty array of integers, return the third maximum number in this array. If it does not exist, return the maximum number. The time complexity must be in 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.

3 AC解

public class Solution {
    public int thirdMax(int[] nums) {
        // 分别代表当前第3大,第2大的,第3大,他会使用int的边界值,所以直接用long就好
        long tmp[] = {Long.MIN_VALUE,Long.MIN_VALUE,Long.MIN_VALUE};
        int i=0;
        int n=nums.length;
        //分三种情况来看
        for(int num:nums){
            if(num< tmp[1] && num>tmp[0]){
                tmp[0]=num;
            } 
            else if (num < tmp[2] && num > tmp[1]){
                tmp[0] = tmp[1];
                tmp[1] = num;
            } 
            else if (num > tmp[2]){
                tmp[0] = tmp[1];
                tmp[1] = tmp[2];
                tmp[2] = num;
            }
        }
        if(tmp[0] == Long.MIN_VALUE){
            return (int)tmp[2];
        }
        return (int)tmp[0];


    }
}

要是你看到的时候已经不能AC了,请联系我

你可能感兴趣的:(leetcode-java)