思路:贪心,思路很重要,如果没有找到“包含全部”,很容易测试不通过,前面几次都是通过测试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);
}
}