华为机试---最大间隔



题目描述

给定一个递增序列,a 1  <a 2  <...<a n  。定义这个序列的最大间隔为d=max{a i+1  - a i  }(1≤i<n),现在要从a 2  ,a 3  ..a n-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 scan = new Scanner(System.in);
  while(scan.hasNext()){
   int n = scan.nextInt();
   int[] data = new int[n];
   for(int i = 0 ; i < n ; i++){
    data[i] = scan.nextInt();
   }
   System.out.println(getMinInteval(data , n));
  }   
  scan.close();
    }
 /**
  * 计算删除递增序列中(1<=i<n-1)的一个元素,剩余序列的最大间隔的最小值
  * */
 public static int getMinInteval(int[] data , int n){
  int minInteval = Integer.MAX_VALUE;
  int maxInteval = getMaxInteval(data , n);
  /* 从a2 ,a3 ..an-1 中删除一个元素,即删除数组下标为1~n-2的元素
   * 1.每次删除下标i的元素,比较a[i+1]-a[i-1]和maxInteval的大小,取较大值即为删除当前元素后的最大间隔
   * 2.比较删除每个元素后的最大间隔,取最小值即为剩余序列最大间隔的最小值
   * */
  
  for(int i = 1 ; i < n - 1 ; i++){   
   minInteval = Math.min(minInteval , Math.max(data[i + 1] - data[i - 1] , maxInteval));
  }
  return minInteval;
 }
 /**
  * 计算原始数组的最大相邻间隔
  * */
 public static int getMaxInteval(int[] data, int n){
  int maxInteval = Integer.MIN_VALUE;
  for(int i = 1 ; i < n ; i++){
   if(data[i] - data[i - 1] > maxInteval){
    maxInteval = data[i] - data[i - 1];
   }
  }
  return maxInteval;
 }
}

你可能感兴趣的:(java,华为)