最大间隔--牛客

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

解题思路:
1.先计算原始数组相邻间隔,并在计算的过程中记录最大相邻间隔max。

2.删除ai(1≤i<n)后所得新数组的最大相邻间隔只会在a[i+1]-a[i-1]与max中取值,也就是Math.max(nums[i+1]-nums[i-1], max)。

3.再记录每一次删除ai(1≤i<n)后所得最大相邻间隔的最小值。

import java.util.*;

public class Test0627{
    public static void main(String[] args){
        Scanner in = new Scanner(System.in);
        while(in.hasNext()){
            int n = in.nextInt();
            int[] nums = new int[n];
            for(int i = 0;i<n;i++){
                nums[i] = in.nextInt();
            }
            int max = Integer.MIN_VALUE;
            int min = Integer.MAX_VALUE;
            for(int i = 1; i<n;i++){
                int a = nums[i] -nums[i-1];
                max = Math.max(a,max);
            }
            for(int i = 1;i<n-1;i++){
                int a = nums[i+1] -nums[i-1];
                min = Math.min(min,Math.max(a,max));
            }
            System.out.println(min);
        }

    }
}

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值