第一行,一个正整数n(1<=n<=100),序列长度;接下来n个小于1000的正整数,表示一个递增序列。
输出答案。
5 1 2 3 7 8
4
public static void main(String[] args) { Scanner sc = new Scanner(System.in); while(sc.hasNext()){ int n=sc.nextInt(); int[] arr=new int[n]; int max=0; for(int i=0;i<n;i++){ arr[i]=sc.nextInt(); if(i>0) max=Math.max(max,arr[i]-arr[i-1]); } int min=Integer.MAX_VALUE; for(int i=2;i<n;i++){ min=Math.min(min,Math.max(arr[i]-arr[i-2],max)); } System.out.println(min); }
import java.util.Scanner; public class Main { public static void main(String[] args) { Scanner sc = new Scanner(System.in); while (sc.hasNextInt()){ int n = sc.nextInt(); int[] arr = new int[n]; for (int i = 0; i < n; i++) { arr[i] = sc.nextInt(); } int maxSpace = 0; for (int i = 1; i < arr.length; i++) { maxSpace = Math.max(maxSpace,arr[i] - arr[i-1]); } int tempMinMaxSpace = Integer.MAX_VALUE; for (int i = 2; i < arr.length; i++) { int tempSpace = arr[i] - arr[i-2]; if(tempSpace <= maxSpace) {//如果去除当前数前后之间间隔(tempSpace)小于没有取除数的最大间隔(maxSpace) 去除后最大间隔的最小值 就是没有去处数的最大间隔 tempMinMaxSpace = maxSpace; break; }else{//如果去除当前数前后之间间隔(tempSpace)大于没有取除数的最大间隔(maxSpace),这个值就是去除当前数最大间隔 //好吧这个注释把我自己都绕进去了。。。 tempMinMaxSpace = Math.min(tempMinMaxSpace,tempSpace); } } System.out.println(tempMinMaxSpace); } } }
//最大间隔的最小值实际就是原来数组相邻元素间隔的最大值 import java.util.Scanner; import java.util.Arrays; public class Main { public static void main(String[] args) { Scanner sc = new Scanner(System.in); while(sc.hasNext()){ int n = sc.nextInt(); int[] num = new int[n]; int[] d1 = new int[n - 1]; for(int i = 0; i < n; i++){ num[i] = sc.nextInt(); } for(int i = 1; i < n; i++){ d1[i - 1] = num[i] - num[i - 1]; } Arrays.sort(d1); System.out.println(d1[n - 2]); } } }
输入的时候记录所有的差值并保存在list中,同时记录最大的差值和下标。
遍历完后取最大差值及其分别与其左右差值的和的最小值
import java.util.*;
public class Main {
public static void main(String[] args) {
Scanner scanner = new Scanner(System.in);
while (scanner.hasNextInt()) {
int n = scanner.nextInt();
if (n <= 2) {
System.out.println(0);
continue;
}
List<Integer> list = new ArrayList<>();
int i, gap, current;
int index = -1, max = -1;
int last = scanner.nextInt();
for (i = 1; i < n; ++i) {
current = scanner.nextInt();
gap = last - current;
last = current;
if (Math.abs(gap) > max) {
max = Math.abs(gap);
index = i - 1;
}
list.add(gap);
}
if (index > 0) {
max = Math.min(max, Math.abs(list.get(index) + list.get(index - 1)));
}
if (index < list.size() - 1) {
max = Math.min(max, Math.abs(list.get(index) + list.get(index + 1)));
}
System.out.println(max);
}
}
}
import java.util.Scanner;
publicclass Main {
publicstaticvoid main ( String [] args ) {
Scanner sc = new Scanner (System. in ) ;
while ( sc .hasNext()){
int n = sc. nextInt () ;
int [] arr = new int [n] ;
for(int i=0;i<n;i++){
arr[i] =sc. nextInt () ;
}
if ( n < 3 ) {System. out . println ( 0 ) ;System. exit ( 0 ) ; }
for(int i=n-1;i>0;i--){
arr[i] = arr[i] -arr[i- 1 ] ;
}
int min = Integer .MAX_VALUE;
int pos = 0 ;
for(int i=1;i<n-1;i++){
int num = arr[i] +arr[i+ 1 ] ;
if (num<min){
min=num;
pos = i;
}
}
arr[pos+ 1 ] +=arr[pos] ;
arr[pos] = 0 ;
int max = Integer .MIN_VALUE;
for(int i=1;i<n;i++){
if (arr[i] >max) max=arr[i] ;
}
System .out. println (max) ;
}
}
}
import java.util.Scanner; public class test2_5 { public static void main(String[] args) { // TODO Auto-generated method stub Scanner scanner = new Scanner(System.in); while (scanner.hasNext()) { int n = scanner.nextInt(); int[] num = new int[n]; int maxChaZhi = 0; for (int i = 0; i < n; i++) { num[i] = scanner.nextInt(); if (i >= 1) { int temp = num[i] - num[i - 1]; if (temp > maxChaZhi) { maxChaZhi = temp;// 原始最大差值 } } } int removeChaZhi = Integer.MAX_VALUE; for (int i = 1; i < n - 2; i++) { // 如果删除了 i 得到的最大差值最小值 int temp_i = num[i + 1] - num[i - 1]; if (temp_i < removeChaZhi) { removeChaZhi = temp_i; // 记录删除后的最小值 } } int result = 0; if (removeChaZhi > maxChaZhi) { result = removeChaZhi; // 说明删除后的最小值比原始值大 } else { result = maxChaZhi; // 否则就删除那个点,保留原始差值 } System.out.println(result); } } }
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]; int[] brr=new int[n-1]; int [] crr=new int[n-2]; int max=0; boolean flag=false; for(int i=0;i<n;i++){ arr[i]=in.nextInt(); } for(int j=0;j<n-1;j++) { brr[j]=arr[j+1]-arr[j]; if(max<brr[j]) max=brr[j]; } for(int y=0;y<n-2;y++){ crr[y]=brr[y]+brr[y+1]; if(crr[y]<max) flag=true; } if(flag) System.out.println(max); else if(!flag) System.out.println(crr[0]); } } }
链接:https://www.nowcoder.com/questionTerminal/3a571cdc72264d76820396770a151f90 来源:牛客网//思路: 1 2 3 7 8//间隔: 1 1 4 1 d=4//删除后间隔 删2: 2 4 1 d=4// 删3: 1 5 1 d=5// 删7: 1 1 5 d=5//特点:删除后间隔在变大,最大间隔只能>=原间隔,且被改变的那个间隔为之前的两个之和importjava.util.*;publicclassJianGe {publicstaticvoidmain(String[] args){Scanner sc =newScanner(System.in);while(sc.hasNext()){intn=sc.nextInt();/*String[] s=sc.nextLine().split(" ");* int[] num=new int[s.length];* for(int i=0;i<num.length;i++){* num[i]=Integer.parseInt(s[i]);* }* 由于数字可能不止一行,所以第一个这样做失败*///以上存储数据完毕intd=Integer.MIN_VALUE;int[] num=newint[n];for(inti=0;i<n && sc.hasNext();i++){num[i]=sc.nextInt();}//原始的最大间隔int[] dOld=newint[num.length-1];for(inti=0;i<num.length-1;i++){dOld[i]=num[i+1]-num[i];d=Math.max(d,dOld[i]);}//System.out.println(d);//删除每个数字后,剩下的最大间隔int[] dNew=newint[dOld.length-1];intdMin=Integer.MAX_VALUE;intdTemp=d;for(inti=0;i<dNew.length;i++){dTemp=Math.max(d,dOld[i]+dOld[i+1]); //dTemp是删除一个后的最大间隔//注意:之前的错误写法:dTemp=Math.max(dTemp,dOld[i]+dOld[i+1]);导致每次和变量d比较dMin=Math.min(dMin,dTemp); //取出最小的最大间隔}System.out.println(dMin);}}}
import java.util.Scanner; public class Main { public static void main(String[] args) { Scanner in = new Scanner(System.in); int[] a; while(in.hasNext()){ int n = in.nextInt(); a = new int[n]; for(int i=0; i<n;i++){ a[i] = in.nextInt(); } int maxDisMin = findMin(n, a); System.out.println(maxDisMin); } } public static int findMin(int n, int[] a){ //初始化最大间隔 int maxDis = 0; //初始化最大间隔最小值 int maxDisMin = a[n-1] - a[0]; //找出此序列未删除任何元素之前的最大间隔 for(int j=0; j<n-1; j++){ if(a[j+1] - a[j] > maxDis){ maxDis = a[j+1] - a[j]; } } //遍历删除元素a[i](1<=i<=n-2) for(int i=1; i<n-1; i++){ //初始化删除后最大间隔maxDisDel为未删除的最大间隔maxDis int maxDisDel = maxDis; if(a[i+1] - a[i-1] > maxDis){ //如果a[i]前后两元素之差大于maxDis,更新maxDisDel maxDisDel = a[i+1] - a[i-1]; } if(maxDisDel < maxDisMin){ //如果最大间隔小于maxDisMin,更新maxDisMin maxDisMin = maxDisDel; } } return maxDisMin; } }
import java.util.*; public class Main { public static void main(String[] args) { Scanner sc = new Scanner(System.in); while (sc.hasNext()) { int n = sc.nextInt(); List<Integer> list = new LinkedList<Integer>(); for (int i = 0; i < n; i ++ ) list.add(sc.nextInt()); int[] mark = new int[n - 2]; for (int i = 0; i < mark.length; i ++ ) { List<Integer> temp = new LinkedList<>(list); temp.remove(i + 1); mark[i] = fun(temp); } Arrays.sort(mark); System.out.println(mark[0]); } } public static int fun(List<Integer> list) { int max = 0; for (int i = 1; i < list.size(); i ++ ) { int temp = list.get(i) - list.get(i - 1); max = max > temp ? max : temp; } return max; } }