华为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;
    }
}
相关推荐
IT枫斗者1 分钟前
Java 开发实战:从分层架构到性能优化(Spring Boot + MyBatis-Plus + Redis + JWT)
java·spring boot·sql·mysql·性能优化·架构
拾贰_C2 分钟前
【python| pytorch】卸载py库,手动法
开发语言·pytorch·python
!停3 分钟前
数据在内存中的存储(2)
开发语言·c++·算法
龙山云仓3 分钟前
No098:黄道婆&AI:智能的工艺革新与技术传承
大数据·开发语言·人工智能·python·机器学习
spencer_tseng4 分钟前
RedisConnectionMonitor.java
java
Rover.x5 分钟前
Arthas内存泄露排查
java·后端
是喵斯特ya7 分钟前
python开发web暴力破解工具(基础篇)
开发语言·python·web安全
艺杯羹9 分钟前
掌握Spring Boot配置艺术:从YAML基础到实战进阶
java·spring boot·后端·yaml
Legendary_00810 分钟前
Type-C一拖三快充线的核心优势与LDR6020方案深度解析
c语言·开发语言·电脑