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