华为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;
    }
}
相关推荐
CodeHackerBhx11 分钟前
Jenkins
java·运维·jenkins
忘忧人生15 分钟前
docker 容器常用命令
java·docker·容器
hweiyu0018 分钟前
IDEA搭建GO环境
开发语言·后端·golang·intellij-idea·idea·intellij idea
归辞...1 小时前
「iOS」————单例与代理
开发语言·javascript·ios
慕y2741 小时前
Java学习第一百一十部分——CI/CD
java·学习·ci/cd
柊二三1 小时前
spring boot开发中的资源处理等问题
java·spring boot·后端
一枚小小程序员哈1 小时前
基于springboot的宠物商城设计与实现
java·spring boot·spring·eclipse·tomcat·maven·宠物
崎岖Qiu1 小时前
leetcode643:子数组最大平均数 I(滑动窗口入门之定长滑动窗口)
java·算法·leetcode·力扣·双指针·滑动窗口
Asu52021 小时前
思途AOP学习笔记 0806
java·sql·学习·mybatis
老华带你飞2 小时前
健身管理|基于java的健身管理系统小程序(源码+数据库+文档)
java·数据库·小程序·vue·论文·毕设·健身管理系统小程序