思路:贪心,思路很重要,如果没有找到“包含全部”,很容易测试不通过,前面几次都是通过测试90%。

  • 先对输入的位置,从小到大排序
  • 通过举特殊例子来说如果x特别大 100或200,位置之间相邻的距离远远小于100/200,那么显然最小距离就是本身的最小距离。
  • 排除比原先最小距离大的情况之外,利用贪心的思想,循环判断
  • 用min 跟(最右边的点 也就是最大点)减去(最左边的点 最小点)得到的最大可能的距离 比较。
  • 找最小距离

关键Math.max(location[i]+x,location[n-1]-x)-Math.min(location[0]+x,location[i+1]-x) 需要理解透

import java.util.*;
public class Main{
    public static void main(String arg[]){
        Scanner sc=new Scanner(System.in);
        int n=sc.nextInt();
        int[] location=new int[n];
        for(int i=0;i<n;i++){
            location[i]=sc.nextInt();
        }
        int x=sc.nextInt();
        Arrays.sort(location);
        int min=Math.abs(location[n-1]-location[0]);
        for(int i=0;i<n-1;i++){
            min=Math.min(min,Math.max(location[i]+x,location[n-1]-x)-Math.min(location[0]+x,location[i+1]-x));
        }
        System.out.print(min);
    }
}