leetcode_Third Maximum Number

版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/alw_123/article/details/76714183

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.

意思就是说,在O(N)的时间复杂度下,在一个非空的数组里找第三大的数字,如果没有第三大的数字就返回最大的数字,如果像1,2,3,2这种数据的话,1才是第3大的数字。

思路:开辟一个最大size为3的辅助空间,保存最大的3个数字(遍历数组时将当前数字a和辅助空间中的最小的数字b比较,如果比a>b那么就将b替换为a,O(3n)),然后将辅助空间排序(O(1)),最后判断辅助空间的size是否为3,如果是3就返回第三大的数字,否则返回最大数字。

public class ThirdMaximumNumber {
    public int thirdMax(int[] nums) {
        ArrayList<Integer> back = new ArrayList<Integer>();
        for(int value:nums)
        {
            if(!back.contains(value))
            {
                //不够就加
                if(back.size() < 3)
                {
                    back.add(value);
                    continue;
                }
                //替换最小的
                int minIndex = 0;
                int minValue =Integer.MAX_VALUE;
                for(int i = 0; i < back.size(); ++i)
                {
                    if(back.get(i) < minValue)
                    {
                        minIndex = i;
                        minValue = back.get(i);
                    }
                }
                if(value > minValue)
                    back.set(minIndex, value);
            }
        }
        //升序排序
        back.sort(new Comparator<Integer>() {
            public int compare(Integer o1, Integer o2)
            {
                if(o1>o2)
                {
                    return 1;
                }
                else if(o1 < o2)
                    return -1;
                return 0;
            }
        });
        if(back.size() <3)
        {
            return back.get(back.size()-1);
        }
        return back.get(0);
    }
 }

猜你喜欢

转载自blog.csdn.net/alw_123/article/details/76714183