华为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;
    }
}
相关推荐
装不满的克莱因瓶43 分钟前
【踩坑】IDEA提交Git .gitignore忽略文件不起作用
java·git·.gitignore·踩坑
superman超哥1 小时前
Rust 异步错误处理最佳实践
开发语言·rust·编程语言·rust异步错误处理·rust最佳实践
专注于大数据技术栈1 小时前
java学习--Collection的迭代器
java·python·学习
脏脏a1 小时前
C++ STL list 模拟实现:从底层链表到容器封装
开发语言·c++·stl·双链表
毕设源码-郭学长8 小时前
【开题答辩全过程】以 基于SpringBoot技术的美妆销售系统为例,包含答辩的问题和答案
java·spring boot·后端
故事不长丨8 小时前
C#正则表达式完全攻略:从基础到实战的全场景应用指南
开发语言·正则表达式·c#·regex
梨落秋霜8 小时前
Python入门篇【文件处理】
android·java·python
Java 码农8 小时前
RabbitMQ集群部署方案及配置指南03
java·python·rabbitmq
哈库纳玛塔塔8 小时前
放弃 MyBatis,拥抱新一代 Java 数据访问库
java·开发语言·数据库·mybatis·orm·dbvisitor
phltxy9 小时前
从零入门JavaScript:基础语法全解析
开发语言·javascript