#yyds干货盘点# 名企真题专题: 最大间隔

时间:2022-12-21 18:58:40

1.简述:

描述

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

输入描述:

第一行,一个正整数n(1<=n<=100),序列长度;接下来n个小于1000的正整数,表示一个递增序列。

输出描述:

输出答案。

示例1

输入:

5
1 2 3 7 8


输出:

4

2.代码实现:

import java.util.*;
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];
for (int i = 0; i < n; i++) {
arr[i] = in.nextInt();
}
//保存所有情况下的最大间隔
List<Integer> ans = new ArrayList<>();
for (int i = 1; i < n - 1; i++) {
//获取删除掉当前元素后的数组
List<Integer> curList = removeList(arr, i);
int maxDiff = 0;//记录此时数组的最大间隔
for (int j = 1; j < curList.size(); j++) {
int diff = curList.get(j) - curList.get(j - 1);
maxDiff = Math.max(maxDiff, diff);
}
ans.add(maxDiff);
}
//此时ans中记录了所有情况下的最大间隔,找到最小值即可
Collections.sort(ans);
System.out.println(ans.get(0));
}
}
//获取删除掉某一个元素后的数组
public static List<Integer> removeList(int[] arr, int index) {
List<Integer> res = new ArrayList<>();
for (int i = 0; i < arr.length; i++) {
if (i == index) continue;
res.add(arr[i]);
}
return res;
}
}