• 2016蘑菇街编程题:最大间隔


    题目描述

    给定一个递增序列,a1 <a2 <...<an 。定义这个序列的最大间隔为d=max{ai+1 - ai }(1≤i<n),现在要从a2,a3 ..an-1 中删除一个元素。问剩余序列的最大间隔最小是多少?
    输入描述:
    第一行,一个正整数n(1<=n<=100),序列长度;接下来n个小于1000的正整数,表示一个递增序列。
    输出描述:
    输出答案。
    输入例子:
    5
    1 2 3 7 8
    输出例子:
    4
    解题

    当删除元素在原数组的最大间隔的两个元素时候最大间隔增大,当在其他位置时候,这个最大间隔不变,其他位置的间隔增加,但是在怎么增加也不会超过原始数组的最大间隔
    所有删除其中一个元素的最大间隔的最小值就是原始数组的最大间隔
    import java.util.Scanner;
    public class Main{
        public static void main(String [] args){
            Scanner in = new Scanner(System.in);
            int n,maxd=0;
            int[] A;
            while(in.hasNext()){
                n = in.nextInt();
                A = new int[n];
                for(int i =0;i<n;i++)
                    A[i] = in.nextInt();
                maxd = MaxDistanceMin(A,n);
                System.out.println(maxd);
            }
        }
        public static int MaxDistanceMin(int [] A,int n){
            int maxd = -1;
            for(int i=1;i<= n -1;i++){
                maxd = Math.max(maxd,A[i] - A[i-1]);
            }
            return maxd;
        }
    }
    这样是不是投机取巧了
    删除非元素最大间隔的两个元素,可能形成最大间隔
    如:
    1 3 5 8 11 12 最大间隔:3
    删除3,1 5 8 11 12 最大间隔:4
    删除5,1 3 8 11 12 最大间隔:5
    删除8,1 3 5 11 12 最大间隔:6
    删除11,1 3 5 8 12 最大间隔:4

    最大间隔最小值是4,上面程序又问题,测试样例对特殊情况没有考虑
    import java.util.Scanner;
    public class Main{
        public static void main(String [] args){
            Scanner in = new Scanner(System.in);
            int n,maxd=0;
            int[] A;
            while(in.hasNext()){
                n = in.nextInt();
                A = new int[n];
                for(int i =0;i<n;i++)
                    A[i] = in.nextInt();
                maxd = MaxDistanceMin(A,n);
                System.out.println(maxd);
            }
        }
        public static int MaxDistanceMin(int [] A,int n){
            int maxd = -1;
            int minMaxd = Integer.MAX_VALUE;
            int [] d = new int[n-1];
            // 记录相邻两个元素的间隔
            for(int i=1;i<= n -1;i++){
                d[i-1] = A[i] - A[i-1];
                maxd = Math.max(maxd,d[i-1]);// 求出最大间隔 
            }
            // 间隔d 向量元素合并,当大于maxd 的时候选取最小值
            for(int i=0;i<d.length-1 ;i++){
                int subd = d[i] + d[i+1];
                if(subd> maxd){// 新的最大间隔 
                    minMaxd = Math.min(minMaxd,subd);
                }else{
                    minMaxd = Math.min(minMaxd,maxd);
                }
            }
            return minMaxd;
        }
    }





  • 相关阅读:
    PhpStorm如何连接外部服务器

    hello,bokeyuan
    pyspark SparkSession及dataframe基本操作
    spark2.2 中文文档
    广告推荐加入图像特征
    docker教程
    DSSM算法-计算文本相似度
    navivate 下载
    save——model模块保存和载入使用简单例子
  • 原文地址:https://www.cnblogs.com/theskulls/p/5338309.html
Copyright © 2020-2023  润新知