当前位置: 首页 > news >正文

华为OD机试-最短木板长度-二分法(A卷,100分)

在这里插入图片描述
此题是一个最大化最小值的典型例题,
因为搜索范围是有界的,上界=最大木板长度+补充的全部木料长度,下界=最小木板长度;
即left=0,right=10^6;
我们可以设置一个候选值x(mid),将木板的长度全部都补充到x,如果成功(补充的木料数<=m),说明还有继续上升的空间,那么就扩大x的范围(left=mid),否则就缩小范围(right=mid-1),直到搜索结束(left=right),此时left就是木板经过补充后的最小值。

public class Test15 {public static void main(String[] args) {Scanner scanner = new Scanner(System.in);while(scanner.hasNext()) {// 原木板长度int n = scanner.nextInt();// 要补充的木板长度int m = scanner.nextInt();int[] arr = new int[n];for(int i =0;i<n;i++){arr[i] = scanner.nextInt();}System.out.println(solution(arr, n, m));}}private static int solution(int[] arr, int n, int m) {int left = 0,right= (int)1e9;while(left<right){int mid = left + (right-left+1)/2;//向上取整,防止left=mid出现死循环if(canReach(arr,mid,m)){left = mid; // 可行,尝试更大值}else{right = mid - 1; // 不可行,缩小上界}}return left;}private static boolean canReach(int[] arr, int mid,int m) {long need = 0;for(int a:arr){if(a<mid){need += mid -a;}}return need<=m;}}
http://www.dtcms.com/a/240789.html

相关文章:

  • 【时时三省】(C语言基础)变量的存储方式和生存期
  • 医美宏脉软件如何通过快解析实现远程访问?
  • 【java】【服务器】线程上下文丢失 是指什么
  • 【51单片机】4. 模块化编程与LCD1602Debug
  • 2025最全TS手写题之partial/Omit/Pick/Exclude/Readonly/Required
  • STM32使用水位传感器
  • 牛客round95D
  • 科伦药业:以“三发引擎”驱动创新,全面迈入价值收获新周期
  • TCA 循环中间体如何改写肝损伤命运【AbMole】
  • VAS1086Q 奇力科技线性芯片车规用品LED驱动芯片
  • 无人机EN 18031欧盟网络安全认证详细解读
  • ABAP设计模式之---“童子军法则(The Boy Scout Rule)”
  • 最短路径算法总结
  • 卡尔曼滤波器:从概念到应用
  • ICDAR数据集简介
  • RAID存储技术概述
  • 破解路内监管盲区:免布线低位视频桩重塑停车管理新标准
  • 2025年- H79-Lc187--118. 杨辉三角(找规律)--Java版
  • 初识Docker——容器化革命核心概念
  • LangChain 中的文档加载器(Loader)与文本切分器(Splitter)详解《二》
  • 【Proteus仿真】【32单片机-A010】步进电机控制系统设计
  • 前端与服务器交互以及前端项目组成。
  • 了解Android studio 初学者零基础推荐(4)
  • 计算机视觉一些定义解析
  • RK3588开发笔记-wifi6 SDIO接口rtl8822cs调试笔记
  • 多核处理器系统中内存一致性问题举例
  • PydanticAI快速入门示例
  • React事件处理:如何给按钮绑定onClick点击事件?
  • 运行vue项目报错 errors and 0 warnings potentially fixable with the `--fix` option.
  • L1和L2核心区别 !!--part 2