第一行,一个正整数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;
}
}