华为OD机试-最佳植树距离-二分(JAVA 2025A卷)


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;
    }
}
相关推荐
布朗克1683 分钟前
25 IO流高级操作——序列化、NIO与Files工具类
java·数据库·io·nio
njsgcs4 分钟前
c# solidworks 创建装配体工程图+bom
开发语言·c#·solidworks
小研说技术8 分钟前
Spring AI实现rag流程(简易版)
java·后端
亓才孓13 分钟前
【本地项目引用外部库的类,想修改字段遇到的请缓存的问题】
java·maven
小林敲代码778823 分钟前
记录一下IDEA中很多变量变色的方案
java·开发语言·spring boot·idea
南知意-27 分钟前
IDEA 2026.1最新版安装教程
java·ide·intellij-idea·idea安装·idea激活
njsgcs33 分钟前
c# solidworks 工程图获得展开视图不在固定面螺纹特征的位置
开发语言·c#·solidworks
星子落怀aa44 分钟前
Java 反复报错?Gemini助力修复
java
半夜修仙1 小时前
RabbitMQ中如何保证消息的可靠性传输
java·分布式·中间件·rabbitmq·github·java-rabbitmq
Flittly1 小时前
【AgentScope Java新手村系列】(3)工具系统
java·spring boot·spring