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

题目描述

给定一个递增序列,a1 <a2 <...<an 。定义这个序列的最大间隔为d=max{ai+1 - ai }(1≤i<n),现在要从a2,a3 ..an-1 中删除一个元素。问剩余序列的最大间隔最小是多少?

输入描述:
第一行,一个正整数n(1<=n<=100),序列长度;接下来n个小于1000的正整数,表示一个递增序列。
输出描述:
输出答案。
输入例子:
51 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;
    }
}
				
时间: 2024-11-03 22:14:46

2016蘑菇街编程题:最大间隔的相关文章

腾讯2016校招编程题【PHP实现】

2016腾讯春招的编程题 话不多说,直接上题!!! 给定一个字符串s,你可以从中删除一些字符,使得剩下的串是一个回文串.如何删除才能使得回文串最长呢?输出需要删除的字符个数 . 这道题是以回文为载体,考察两个字符间的最大子串,最大子串算法在表示字符串的关联度上用途很广泛. 而遮到题就是字符串的长度减去其和翻转字符串的长度的最大子串即可.最长子串的算法我一开始也是蒙的.这完全没没思路呀. 后来看到一篇blog,才明白最长子串,好的,最后我们形成代码 代码实现: function solution

美团2016在线编程题 最大差(贪心)

题目描述 有一个长为n的数组A,求满足0≤a≤b<n的A[b]-A[a]的最大值. 给定数组A及它的大小n,请返回最大差值. 测试样例: [10,5],2 返回:0 思路:最大插差值dis初始化为0,用一个指针从头遍历,找到指针之前及指针指向的元素的最小值为被减数min1,若指针指向的元素A[i] - min1 > dis,则dis更新为 A[i] - min1. 1 class LongestDistance { 2 public: 3 int getDis(vector<int>

2016京东编程题:抛小球

抛小球 题目描述 小东和三个朋友一起在楼上抛小球,他们站在楼房的不同层,假设小东站的楼层距离地面N米,球从他手里自由落下,每次落地后反跳回上次下落高度的一半,并以此类推知道全部落到地面不跳,求4个小球一共经过了多少米?(数字都为整数) 给定四个整数A,B,C,D,请返回所求结果. 测试样例: 100,90,80,70 返回:1020解题 感觉很简单,但是在double to int 上出现了问题,参看讨论有下面答案 import java.util.*; public class Balls {

腾讯2016实习生编程题 打印蛇形二维数组

当时腾讯测评笔试的时候没有写出来,今天想想把这玩意给弄出来,想思路包括写程序大概用了20分钟,接着调试程序用了接近30分钟 根据这些情况,恩,给自己打75分.  调试过程中出现的异常主要是数组下标越界  就是循环过程,在边界条件下,中数组下标没有处理好 下面是我的code package test1; /* * 输入一个整数 输出一个矩阵 * 例子 整数等于3 * 矩阵为 1 2 3 * 8 9 4 * 7 6 5 *输出为 1 2 3 8 9 4 7 6 5 * 思路:首先确定有多少圈 就有多

[编程题-蘑菇街] 最大间隔

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

蘑菇街2016研发工程师在线编程题

传送门 第一题: [编程题] 搬圆桌 现在有一张半径为r的圆桌,其中心位于(x,y),现在他想把圆桌的中心移到(x1,y1).每次移动一步,都必须在圆桌边缘固定一个点然后将圆桌绕这个点旋转.问最少需要移动几步. 输入描述: 一行五个整数r,x,y,x1,y1(1≤r≤100000,-100000≤x,y,x1,y1≤100000) 输出描述: 输出一个整数,表示答案 输入例子: 2 0 0 0 4 输出例子: 1 题解转自:ixiaomo 思路很简单,千万别想复杂了 无论圆桌如何移动,都必须在圆

2016携程测试实习生笔试编程题

四道大题: 第一道题,是携程网站有一个725*286(具体不记得了)广告区域,能想到的测试类型及方法. 写测试用例——2016年1月1日到2016年3月1日同一订单往返机票立减50 全部功能点. 第二道题,sql语句.(该学sql- -) 第三道题,编程题: 有N个球,M个颜色(M小于等于N),求要想从这N个球里拿出全部(M)个颜色的球,至少需要拿多少个. 思路: 我又是用map实现的,当map的size==M的时候,就说明颜色已经集齐了,计算一个minNum,然后继续扫描,更新minNum 感

JavaScript编程题(含腾讯2016校招题)

作者:ManfredHu 链接:http://www.manfredhu.com/2016/04/02/15-veryGoodForUsing/ 声明:版权所有,转载请保留本段信息,否则请不要转载 几道觉得挺有意思的编程题,感觉做下来,自己对一些新方法的看法有了新的变化. 比如indexOf,reduce,Array.isArray,forEach这些方法,以前一看到兼容性是IE9+就有点害怕,项目中不敢用,导致后面越来越陌生,不过现在一想的话.其实只要用Polyfill或者提前fix掉就可以了

百度2016实习 前端试题中的编程题2:Excel地址的相互转换 [2015南桥杯试题]

百度2016实习 前端试题中的编程题2:Excel地址的相互转换  Excel是最常用的办公软件.每个单元格都有唯一的地址表示.比如:第12行第4列表示为:"D12",第5行第255列表示为"IU5". 事实上,Excel提供了两种地址表示方法,还有一种表示法叫做RC格式地址. 第12行第4列表示为:"R12C4",第5行第255列表示为"R5C255". 要求:编写程序,对换两种不同的表示方法表示行列,即 如果输入是常规地址