zoukankan      html  css  js  c++  java
  • Third Maximum Number

    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.
    

    我的答案:

    class Solution {
        public int thirdMax(int[] nums) {
            sort(nums);
            int a = 1;
            int thrid = nums[nums.length - 1];
            for (int i = nums.length-1; i >=0; i--) {
                int num = nums[i];
                if (num < thrid) {
                    a++;
                    thrid = num;
                }
                if (a == 3) {
                    break;
                }
            }
            if (a < 3) {
                return nums[nums.length - 1];
            }
            return thrid;
        }
        
        private static int partition(int[] arr, int l, int r){
    
            int v = arr[l];
            int j = l; // arr[l+1...j] < v ; arr[j+1...i) > v
            for( int i = l + 1 ; i <= r ; i ++ )
                if( arr[i]< v ){
                    j ++;
                    swap(arr, j, i);
                }
            swap(arr, l, j);
            return j;
        }
    
        private static void sort(int[] arr, int l, int r){
            if( l >= r )
                return;
            int p = partition(arr, l, r);
            sort(arr, l, p-1 );
            sort(arr, p+1, r);
        }
    
    
        public static void sort(int[] arr){
            int n = arr.length;
            sort(arr, 0, n-1);
        }
        private static void swap(int[] arr, int i, int j) {
            int t = arr[i];
            arr[i] = arr[j];
            arr[j] = t;
        }
    }
    

    大神的答案:

     public int thirdMax(int[] nums) {
            Integer max1 = null;
            Integer max2 = null;
            Integer max3 = null;
            for (Integer n : nums) {
                if (n.equals(max1) || n.equals(max2) || n.equals(max3)) continue;
                if (max1 == null || n > max1) {
                    max3 = max2;
                    max2 = max1;
                    max1 = n;
                } else if (max2 == null || n > max2) {
                    max3 = max2;
                    max2 = n;
                } else if (max3 == null || n > max3) {
                    max3 = n;
                }
            }
            return max3 == null ? max1 : max3;
    }
    
  • 相关阅读:
    c语言中malloc函数的使用
    C语言的头文件和宏定义详解
    CUDA程序闪退时的处理方法【转】
    Shell面试,笔试整理
    阿里云系统安装部署Freeswitch
    汇编——根据偏移地址索取到的字数据
    一个典型的空语句(c,c++)
    关于64位系统的debug使用方法
    隐藏表单域、URL重写、cookie、session
    MVC的路由
  • 原文地址:https://www.cnblogs.com/luozhiyun/p/8395875.html
Copyright © 2011-2022 走看看