zoukankan      html  css  js  c++  java
  • letcode每日一题-最大间距

    今日每日一题,最大间距,一看难度困难,我想ctrl+c再ctrl+v,但是再一看题,嗯,,,,我好想可以

    我的代码:

    
    public int maximumGap(int[] nums) {
            Arrays.sort(nums);
            int max=0;
            for(int i=0;i<nums.length-1;i++){
                int tmp=nums[i+1]-nums[i];
                if(tmp>max){
                    max=tmp;
                }
            }
            return max;
        }
    
    


    这道题的难点在于如何用线性的时空复杂度来解决。直接sort然后遍历数组当然可以解决问题,但是面试的时候这
    种解法肯定是不能让面试官满意的。

    实现代码如下:

    
    public int maximumGap(int[] nums) {
            if(nums.length==0){
                return 0;
            }
            if(nums.length<=2){
                return Math.abs(nums[0]-nums[nums.length-1]);
            }
            int max=Arrays.stream(nums).max().getAsInt();
            int min=Arrays.stream(nums).min().getAsInt();
            //Math.max防止出现长度为0的情况
            int bucket_len=Math.max(1,(max-min)/(nums.length-1));
            ArrayList<Integer>[] buckets=new ArrayList[(max-min)/bucket_len+1];
            for(int i=0;i<nums.length;i++){
                int tmpIndex=(nums[i]-min)/bucket_len;
                if(buckets[tmpIndex]==null){
                    buckets[tmpIndex]=new ArrayList<>();
                }
                buckets[tmpIndex].add(nums[i]);
            }
            int result=0;
            int prev=-1;
            for(int i=0;i<buckets.length;i++){
                if(buckets[i]!=null){
                    Collections.sort(buckets[i]);
                    if(prev!=-1){
                        int tmp=buckets[i].stream().min((a,b)->{if(a.equals(b)){return  0;} return a>b?1:-1;}).get()-prev;
                        if(tmp>result){
                            result=tmp;
                        }
                    }
                    prev=buckets[i].stream().max((a,b)->{if(a.equals(b)){return  0;} return a>b?1:-1;}).get();
                }
            }
            return result;
        }
    
    

  • 相关阅读:
    Codeforces Round #352 (Div. 1) B. Robin Hood (二分)
    Codeforces Round #209 (Div. 2) D. Pair of Numbers (模拟)
    Kattis
    kattis Curious Cupid (莫队算法)
    HYSBZ
    SPOJ NETADMIN
    day26-2 基于TCP协议的套接字编程
    day26-1 TCP三次握手和四次挥手
    day25-2 OSI协议和socket抽象层
    day25-1 网络架构与互联网组成
  • 原文地址:https://www.cnblogs.com/MissWX/p/14042189.html
Copyright © 2011-2022 走看看