java
import java.util.*;
/**
* @version Ver 1.0
* @date 2025/6/19
* @description 最小种植距离
*/
public class MinPlantDistance {
public static void main(String[] args) {
Scanner sc =new Scanner(System.in);
int num = Integer.parseInt(sc.nextLine());
int[] arrs = Arrays.stream(sc.nextLine().split("\\s+")).mapToInt(Integer::parseInt).toArray();
int target = Integer.parseInt(sc.nextLine());
solve(arrs, target);
}
private static void solve(int[] arrs, int target) {
Arrays.sort(arrs);
int left =1, right = Arrays.stream(arrs).max().getAsInt() - Arrays.stream(arrs).min().getAsInt();
while(left < right){
int mid = left + (right - left+1) / 2;//向上取整
if(canReach(arrs,target,mid)){
left = mid;
}else{
right = mid-1;
}
}
System.out.println(left);
}
private static boolean canReach(int[] arrs, int target, int mid) {
// mid 最小间距, a 存放前一个比较元素的索引 count 已经种树的数量,因为已经排序,默认从最小的位置开始种树
int a = 0, count = 1;
for (int i = 1; i < arrs.length; i++) {
if(arrs[i] - arrs[a] >= mid){
count++;
a = i;
}
}
return count >= target;
}
}