【华为OD-E卷-木板 100分(python、java、c++、js、c)】

【华为OD-E卷-木板 100分(python、java、c++、js、c)】

题目

小明有 n 块木板,第 i ( 1 ≤ i ≤ n ) 块木板长度为 ai。

小明买了一块长度为 m 的木料,这块木料可以切割成任意块,拼接到已有的木板上,用来加长木板。

小明想让最短的模板尽量长。请问小明加长木板后,最短木板的长度可以为多少?

输入描述

  • 输入的第一行包含两个正整数, n ( 1 ≤ n ≤ 10^3 ), m ( 1 ≤ m ≤ 10^6 ),n 表示木板数, m 表示木板长度。

输入的第二行包含 n 个正整数, a1, a2,…an ( 1 ≤ ai ≤ 10^6 )

输出描述

  • 输出的唯一一行包含一个正整数,表示加长木板后,最短木板的长度最大可以为多少?

用例

用例一:
输入:
5 3
4 5 3 5 5
输出:
5
用例二:
输入:
5 2
4 5 3 5 5
输出:
4

python解法

  • 解题思路:
  • 本题的目的是找到一个最大长度,使得我们可以通过给定的操作数量 m 来调整数组 a 中的元素,使得所有元素都至少达到该长度。每次操作可以增加某个元素的值。我们希望通过二分法来高效地找到这个最大长度。

具体步骤:
输入分析:首先,输入的是两个整数 n 和 m,分别表示数组 a 的长度和我们可以进行的操作次数。接着输入一个整数列表 a,表示数组的初始值。

核心问题:我们需要判断是否可以通过最多 m 次操作将所有元素增加到某个长度 L(即 L 为数组中的最小值)。为了检查是否能达到某个长度 L,我们可以计算将每个元素增加到 L 所需的操作次数。如果总操作次数不超过 m,则说明可以实现。

二分查找:为了快速找到最大长度,可以用二分查找:

low 初始化为数组中的最小值,high 初始化为数组中的最大值加上 m,因为最多可以将数组元素增加 m。
在二分查找过程中,每次判断当前中点 mid 是否能通过 m 次操作实现。如果能,则尝试增大 mid;如果不能,则减小 mid。
判断函数:can_achieve_length 用于判断是否能将所有元素至少调整到某个长度 length,它的核心是计算每个元素需要增加多少才能达到该长度,并判断是否总操作数不超过 m。

n, m = map(int, input().split())  # 读取n和m,n是数组的长度,m是可以进行的操作次数
a = list(map(int, input().split()))  # 读取数组a# 判断是否能通过m次操作将所有元素调整到至少length的值
def can_achieve_length(length, a, m):needed = sum(max(0, length - x) for x in a)  # 计算所有元素增加到length所需要的操作次数return needed <= m  # 如果操作次数不超过m,则返回True# 利用二分查找找到最大长度
def find_max_length(a, m):low, high = min(a), max(a) + m  # 初始范围,最小值是数组的最小元素,最大值是数组最大值加上mbest = low  # 保存当前找到的最佳长度while low <= high:  # 二分查找mid = (low + high) // 2  # 计算中间值if can_achieve_length(mid, a, m):  # 如果可以通过m次操作使所有元素至少为midbest = mid  # 更新最佳长度low = mid + 1  # 尝试寻找更大的值else:high = mid - 1  # 尝试寻找更小的值return best  # 返回找到的最大长度print(find_max_length(a, m))  # 输出结果

java解法

  • 解题思路
更新中

C++解法

  • 解题思路
更新中

C解法

  • 解题思路

更新中

JS解法

  • 解题思路

  • 这道题目要求我们找到一个最大值,使得通过至多 m 次操作,可以将数组 a 中的所有元素调整到至少达到这个值。每次操作可以增加数组元素的值。为了高效地找到这个最大值,我们可以利用 二分查找 的方法。

具体步骤:
输入分析:输入的第一个值是 n(数组的长度),第二个是 m(最多可以进行的操作次数)。接着输入数组 a,其元素表示需要调整的值。

核心问题:对于给定的 m 次操作,能否将数组的所有元素至少增加到某个长度 mid。如果每个元素都小于 mid,就需要增加相应的差值。目标是找出最大的 mid,使得通过至多 m 次操作就能将数组所有元素调整到至少 mid。

二分查找:我们可以通过二分查找来找到这个最大长度 mid,从 low = min(a) 到 high = max(a) + m。每次计算 mid,并判断是否能通过 m 次操作达到这个长度。如果能,则说明可以尝试更大的 mid,否则减小 mid。

判断函数:在每一次的二分查找中,我们需要计算将所有元素调整到 mid 所需的总操作次数,判断是否不超过 m。

// 最大长度查找函数
function maxMinLength(m, a) {let low = Math.min(...a);  // 初始时,low为数组a中的最小值let high = Math.max(...a) + m;  // high为数组a中的最大值加上操作次数mwhile (low < high) {  // 二分查找const mid = Math.floor((low + high + 1) / 2);  // 计算中点值,向上取整const needed = a.reduce((sum, length) => {  // 计算将所有元素调整到mid所需的操作次数return sum + Math.max(0, mid - length);  // 对于小于mid的元素,计算差值}, 0);if (needed <= m) {  // 如果操作次数不超过m,说明可以尝试更大的midlow = mid;  // 更新low值} else {  // 否则,减少midhigh = mid - 1;}}return low;  // 最终返回的low即为最大能达到的长度
}// 读取输入的部分
const readline = require('readline');
const rl = readline.createInterface({input: process.stdin,output: process.stdout
});let input = [];rl.on('line', (line) => {input.push(line);  // 逐行读取输入
}).on('close', () => {const [n, m] = input[0].split(' ').map(Number);  // 解析n和mconst a = input[1].split(' ').map(Number);  // 解析数组aconsole.log(maxMinLength(m, a));  // 调用函数输出结果
});

注意:

如果发现代码有用例覆盖不到的情况,欢迎反馈!会在第一时间修正,更新。
解题不易,如对您有帮助,欢迎点赞/收藏

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/web/63897.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

OMG DDS 规范漫谈:分布式数据交互的演进之路

一、由来与起源脉络 OMG DDS&#xff08;Object Management Group Data Distribution Service&#xff09;的发展是计算机科学和技术进步的一个缩影&#xff0c;它反映了对高效、可靠的数据共享需求的响应。DDS 的概念萌生于20世纪90年代末&#xff0c;当时分布式计算已经从理…

Spring源码分析之AOP-@EnableAspectJAutoProxy

前言 这篇文章之前我们说了Springboot的启动流程,Bean对象怎么实现从无到有的一个过程还有一些接口的拓展的实现等等那么从这一篇文章开始的话我们就会开始说一说我们的常用的AOP它的底层实现原理所以大家一起加油加油&#xff01;&#xff01;&#xff01; AOP: 1.简介: AOP的…

Linux(Centos 7.6)基本信息查看

1.服务器硬件信息查看 1.1.服务器厂商、产品名称查看 dmidecode -s system-manufacturer&#xff1a;查看服务器厂商信息 dmidecode -s system-product-name&#xff1a;查看服务器产品名称信息 1.Windows使用VMware安装的Linux(Centos 7.6)后&#xff0c;服务器厂商、产品名…

小程序app封装公用顶部筛选区uv-drop-down

参考ui:DropDown 下拉筛选 | 我的资料管理-uv-ui 是全面兼容vue32、nvue、app、h5、小程序等多端的uni-app生态框架 样式示例&#xff1a; 封装公用文件代码 dropDownTemplete <template><!-- 顶部下拉筛选区封装公用组件 --><view><uv-drop-down ref&…

LeetCode:101. 对称二叉树

跟着carl学算法&#xff0c;本系列博客仅做个人记录&#xff0c;建议大家都去看carl本人的博客&#xff0c;写的真的很好的&#xff01; 代码随想录 LeetCode&#xff1a;101. 对称二叉树 给你一个二叉树的根节点 root &#xff0c; 检查它是否轴对称。 示例 1&#xff1a; 输…

Docker-如何启动docker

作者介绍&#xff1a;简历上没有一个精通的运维工程师。希望大家多多关注作者&#xff0c;下面的思维导图也是预计更新的内容和当前进度(不定时更新)。 我们在上一章&#xff0c;讲了虚拟化&#xff0c;虚拟化是把硬件虚拟化&#xff0c;然后创建出来的虚拟机完全隔离&#xff…

COMSOL with Matlab

文章目录 基本介绍COMSOL with MatlabCOMSOL主Matlab辅Matlab为主Comsol为辅 操作步骤常用指令mphopenmphgeommghmeshmphmeshstatsmphnavigatormphplot常用指令mphsavemphlaunchModelUtil.clear 实例教学自动另存新档**把语法套用到边界条件**把语法套用到另存新档 函数及其微分…

JVM系列(十二) -常用调优命令汇总

最近对 JVM 技术知识进行了重新整理&#xff0c;再次献上 JVM系列文章合集索引&#xff0c;感兴趣的小伙伴可以直接点击如下地址快速阅读。 JVM系列(一) -什么是虚拟机JVM系列(二) -类的加载过程JVM系列(三) -内存布局详解JVM系列(四) -对象的创建过程JVM系列(五) -对象的内存分…

bmp390l传感器的IIC命令通信(学习汇总)

参考链接&#xff1a; BMP390高精度压力传感器数据读取与处理&#xff08;基于STM32&#xff09;-CSDN博客 https://blog.csdn.net/qq_43862401/article/details/106502397 利用usb转iic模块测试bmp390l传感器采集当前环境的温度和气压数据&#xff0c;下图中reserved表示…

Windows11 家庭版安装配置 Docker

1. 安装WSL WSL 是什么&#xff1a; WSL 是一个在 Windows 上运行 Linux 环境的轻量级工具&#xff0c;它可以让用户在 Windows 系统中运行 Linux 工具和应用程序。Docker 为什么需要 WSL&#xff1a; Docker 依赖 Linux 内核功能&#xff0c;WSL 2 提供了一个高性能、轻量级的…

2025系统架构师(一考就过):案例题之一:嵌入式架构、大数据架构、ISA

一、嵌入式系统架构 软件脆弱性是软件中存在的弱点(或缺陷)&#xff0c;利用它可以危害系统安全策略&#xff0c;导致信息丢失、系统价值和可用性降低。嵌入式系统软件架构通常采用分层架构&#xff0c;它可以将问题分解为一系列相对独立的子问题&#xff0c;局部化在每一层中…

新手SEO指南如何快速入门与提升网站排名

内容概要 搜索引擎优化&#xff08;SEO&#xff09;是提高网站可见度和排名的重要手段&#xff0c;尤其对新手来说&#xff0c;掌握其基本概念和实用技巧至关重要。本文将针对新手提供一系列的指导&#xff0c;帮助你快速入门并逐步提升网站排名。 首先&#xff0c;了解SEO的…

Oracle下载安装(保姆级教学)

方法1 1. 官网下载安装包 对于 Oracle 软件的下载&#xff0c;建议通过官网免费下载&#xff0c;安全且有保证。 下载地址&#xff1a; https://www.oracle.com/database/technologies/oracle19c-windows-downloads.html 通过下载页面可以选择安装压缩包&#xff08; WIND…

第22天:信息收集-Web应用各语言框架安全组件联动系统数据特征人工分析识别项目

#知识点 1、信息收集-Web应用-开发框架-识别安全 2、信息收集-Web应用-安全组件-特征分析 一、ICO图标&#xff1a; 1、某个应用系统的标示&#xff0c;如若依系统有自己特点的图标&#xff1b;一旦该系统出问题&#xff0c;使用该系统的网站都会受到影响&#xff1b; 2、某个公…

重温设计模式--建造者模式

文章目录 建造者模式&#xff08;Builder Pattern&#xff09;概述建造者模式UML图作用&#xff1a;建造者模式的结构产品&#xff08;Product&#xff09;&#xff1a;抽象建造者&#xff08;Builder&#xff09;&#xff1a;具体建造者&#xff08;Concrete Builder&#xff…

arcgisPro相接多个面要素转出为完整独立线要素

1、使用【面转线】工具&#xff0c;并取消勾选“识别和存储面邻域信息”&#xff0c;如下&#xff1a; 2、得到的线要素&#xff0c;如下&#xff1a;

51单片机仿真摇号抽奖机源程序 12864液晶显示

资料下载地址&#xff1a;51单片机仿真摇号抽奖机源程序12864液晶显示仿真程序 一、功能介绍 单片机连接12864&#xff08;st7920&#xff09;液晶显示器和1个按键接INT0&#xff0c;模拟一个抽奖机。 实现效果&#xff1a; 1、液晶初始显示“祝你好运&#xff01;”&#xff…

如何在 Ubuntu 22.04 上安装 Graylog 开源日志管理平台

简介 Graylog 的开源特性、丰富的功能、灵活性和可扩展性使其成为一个流行的日志管理平台。在本教程中&#xff0c;我将向你展示如何在 Ubuntu 22.04 上安装 Graylog&#xff0c;包括配置 Graylog 服务器软件包和访问 Graylog Web UI。 Graylog 是什么&#xff1f; Graylog …

技术发展历程:从 CORBA 到微服务

CORBA CORBA&#xff08;Common Object Request Broker Architecture&#xff09;诞生于上世纪 90 年代初期&#xff0c;由 OMG 组织提出&#xff0c;它作为一种开创性的分布式对象技术规范&#xff0c;在当时的计算机领域引起了轰动。其核心构成部分——接口定义语言&#xf…

抢单人机交互「新红利」!哪些细分赛道“多金”?

受终端用户的智能座舱体验需求驱动&#xff0c;视觉、听觉、触觉等人机交互方式加速焕新。 一方面&#xff0c;人机多模交互引领&#xff0c;车载声学进入新周期。根据高工智能汽车研究院统计数据&#xff0c;单车的车载扬声器搭载量正在快速起量。 很显然&#xff0c;作为智…