牛客网---2016---蘑菇街最大间隔

来源:互联网 发布:机顶盒有必要买吗 知乎 编辑:程序博客网 时间:2024/04/30 19:55

定了外卖,不想做饭了,我已经懒得连图片都不想配了,想要回家,啧啧。。。这个图居然是当年玩但玩的时候的图片,啧啧。。。稀饭这个小姐姐。。。

这里写图片描述

题目:
给定一个递增序列,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

解析:
1 . 初步想法是把所有的点都尝试一遍,然后对比分析,但是这样有点麻烦,所以想一想数据特点,有没有什么特殊的地方。
2 . 删掉一个值,反而让最大间隔最小化。可以这样理解。
最大间隔是原来数组的最大间隔,删掉一个数字,只会让最大间隔变大。
所以要让最大间隔最小,就要保证原来最大间隔不变,保证原来最大间隔不变的前提在于不去修改造成最大间隔的数组。前提保证在不删除最后一个和最初一个数字,所以这个题目实际上就是求数组的最大。当然要考虑数组仅仅为3个的情况,最大必定删除中间值,最大间隔必定是最末尾-最开始数值。
解题所需函数:
1 . Java中int的最大值和最小值如何定义,不要用老土的0和1000000了。

// 注意下,这里因为定义maxX为最小值是因为取最小值,任何值必定比他大,所以反过来定义int maxX = Integer.MIN_VALUE;int minX = Integer.MAX_VALUE;

代码:

import java.util.Scanner;public class Main {    public static void main(String[] args) {        // 获取数据        Scanner in = new Scanner(System.in);        while(in.hasNext()){            // 数组大小创建            int n = in.nextInt();            // 创建数组            int arr[] = new int[n];            int maxLength=Integer.MIN_VALUE;            for (int i = 0; i < n; i++) {                arr[i] = in.nextInt();                if(n==3 && i==n-1){                    maxLength=arr[2]-arr[0];                }else if(i>0 && maxLength<(arr[i]-arr[i-1])){                    maxLength=arr[i]-arr[i-1];                }            }            System.out.println(maxLength);        }        in.close();    }}
原创粉丝点击