题目描述
给定一个递增序列,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 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;
}
}
1878

被折叠的 条评论
为什么被折叠?



