华为OD机试 - 数据最节约的备份方法 - 二分查找(Java 2023 B卷 100分)

news2024/11/23 15:09:30

在这里插入图片描述

目录

    • 一、题目描述
    • 二、输入描述
    • 三、输出描述
    • 四、解题思路
      • 解题思路如下:
      • 解题思路分析:
    • 五、Java算法源码
    • 六、效果展示
      • 1、输入
      • 2、输出
      • 3、说明

华为OD机试 2023B卷题库疯狂收录中,刷题点这里

一、题目描述

有若干个文件,使用刻录光盘的方式进行备份,假设每张光盘的容量是500MB。

求使用光盘最少的文件分布方式,所有文件的大小都是整数的MB,且不超过500MB,文件不能分隔、分卷打包。

二、输入描述

每组文件大小的数据。

三、输出描述

使用光盘的数量。

四、解题思路

题目要求找出使用光盘最少的文件分布方式,使得所有文件都能被备份,每张光盘的容量为500MB。文件的大小都是整数的MB,且不超过500MB。

解题思路如下:

  1. 读取输入的每组文件大小的数据,并将其转换为整数数组;
  2. 对文件的大小进行升序排序,以便从小到大进行分配;
  3. 使用二分查找确定最少的光盘数量。
  • 初始化left为0,表示使用0个光盘;right为files.length + 1,表示使用files.length + 1个光盘(最坏情况);
  • 当left < right时,进行二分查找:
    • 计算mid为(left + right) / 2。
    • 调用cal方法判断是否可以将所有文件分布在mid个光盘中。
      • 在cal方法中,创建长度为mid的整数数组nums,用于记录每个光盘的剩余容量,初始值为500MB;
      • 从文件大小数组files的末尾开始遍历文件大小:
        - 对nums数组进行升序排序,以便从剩余容量最大的光盘开始分配;
        - 如果剩余容量最大的光盘可以容纳当前文件大小f,则将该文件分配给该光盘,并更新光盘的剩余容量;
        - 如果剩余容量最大的光盘无法容纳当前文件大小f,则返回false,表示无法将所有文件分布在当前的光盘数量中;
        - 如果能够将所有文件分布在当前的光盘数量中,则返回true。
        - 如果cal方法返回true,表示当前的光盘数量可以容纳所有文件,将right更新为mid。
        - 如果cal方法返回false,表示当前的光盘数量无法容纳所有文件,将left更新为mid + 1。
  1. 输出最终确定的光盘数量left。

解题思路分析:

该算法使用二分查找的思想确定最少的光盘数量。首先对文件的大小进行升序排序,然后在二分查找的过程中,通过调用cal方法判断当前的光盘数量是否可以容纳所有文件。在cal方法中,根据剩余容量最大的光盘逐个分配文件,并更新光盘的剩余容量。通过不断调整二分查找的左右边界,最终确定最少的光盘数量。算法的时间复杂度为O(log n),其中n为文件数量。

五、Java算法源码

public static void main(String[] args) {
    Scanner in = new Scanner(System.in);
    // 每组文件大小的数据
    int[] files = Arrays.stream(in.nextLine().split(" ")).mapToInt(Integer::parseInt).toArray();
    // 对文件的大小进行升序排序
    Arrays.sort(files);
    int left = 0;
    int right = files.length + 1;

    while (left < right) {
        int mid = (left + right) / 2;
        // 如果方的下,向左移动
        if (cal(mid, files)) {
            right = mid;
        } else {// 如果放不下,向右移动
            left = mid + 1;
        }
    }
    System.out.println(left);
}

/**
 * 是否放的下
 * @param mid 中间节点
 * @param files 每组文件大小的数据
 */
public static boolean cal(int mid, int[] files) {
    int[] nums = new int[mid];
    for (int i = 0; i < mid; i++) {
        nums[i] = 500;
    }

    for (int i = files.length - 1; i >= 0; i--) {
        int f = files[i];
        Arrays.sort(nums);
        if (nums[mid - 1] >= f) {
            nums[mid - 1] -= f;
        } else {
            return false;
        }
    }

    return true;
}

六、效果展示

1、输入

100 200 300 400 500

2、输出

3

3、说明

100 + 400、200 + 300 、500 三张光盘即可。

在这里插入图片描述


🏆下一篇:华为OD机试真题 Java 实现【简易内存池】【2023 B卷 200分 考生抽中题】

🏆本文收录于,华为OD机试(JAVA)真题(A卷+B卷)

刷的越多,抽中的概率越大,每一题都有详细的答题思路、详细的代码注释、样例测试,发现新题目,随时更新,全天CSDN在线答疑。

在这里插入图片描述

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

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

相关文章

14k字综述视觉大模型

目录 0.导读1.背景介绍1.1基础架构1.2目标函数1.2.1对比式学习1.2.2生成式学习1.3预训练1.3.1预训练数据集1.3.2微调1.3.3提示工程2.基于文本提示的基础模型2.1基于对比学习的方法2.1.1基于通用模型的对比方法2.1.2基于视觉定位基础模型的方法2.2基于生成式的方法2.3基于对比学…

考公-判断推理-逻辑判断

且和或 只能有一个人是我老婆&#xff0c;要么小红&#xff0c;要么小丽&#xff0c;不可能都是我老婆&#xff0c;虽然有些人心里是这么想的 虽然&#xff0c;但是&#xff0c;且 虽然我很丑&#xff0c;但是我很温柔 或的翻译&#xff0c;否一推一 例题 例题 德摩根 例题…

数据可视化工具的三大类报表制作流程分享

电脑&#xff08;pc&#xff09;、移动、大屏三大类型的BI数据可视化报表制作步骤基本相同&#xff0c;差别就在于尺寸调整和具体的报表布局。这对于采用点击、拖拉拽方式来制作报表的奥威BI数据可视化工具来说就显得特别简单。接下来&#xff0c;我们就一起看看不这三大类型的…

全网最全360无死角编写软件测试用例模板【建议收藏】

总体编写策略&#xff1a; 对于测试用例编写来说&#xff0c;常用的四种方法基本就够用了&#xff0c;等价类、边界值、正交实验法、错误推断法&#xff0c;辅以场景测试法、需求/设计转换法、探索式测试思想&#xff0c;可以应付绝大多数产品的测试。个别的产品还需要在某一点…

nestjs 基础、使用 passport 来进行鉴权

回顾一些定义 NestJS 部分 Module 模块结构 模块是一个图状引用关系。 模块的实例化有三种模式。默认情况是 singletones 模式&#xff0c;也就是模块可能被引用&#xff0c;但不同的引用处拿的是同一个共享实例&#xff0c;也就是说一个进程有一个唯一的实例被共享。 模块&a…

动态设备状态监测:智能化生产的关键利器

动态设备状态监测正引领着工业生产的智能化转型。本文将深入探讨动态设备状态监测的意义、PreMaint在其中的角色&#xff0c;以及如何实现智能化生产&#xff0c;提高生产效率和可靠性。 1. 动态设备状态监测的重要性 随着制造业的发展&#xff0c;设备的状态监测变得至关重要…

小程序制作教程:从零开始搭建企业小程序

在如今的数字化时代&#xff0c;企业介绍小程序成为了企业展示与推广的重要工具。通过企业介绍小程序&#xff0c;企业可以向用户展示自己的品牌形象、产品服务以及企业文化等内容&#xff0c;进而提高用户对企业的认知度和信任度。本文将介绍如何从零开始搭建一个企业介绍小程…

基于深度信念网络的西储大学轴承故障分类识别,基于EMD+DBN的西储大学轴承故障识别,LCD+DBN,LMD+DBN

目录 背影 DBN神经网络的原理 DBN神经网络的定义 受限玻尔兹曼机(RBM) (EMD,LCD,LMD)+DBN的深度信念网络的西储大学轴承故障分类识别 基本结构 主要参数 数据 MATALB代码 结果图 展望 背影 DBN是一种深度学习神经网络,拥有提取特征,非监督学习的能力,是一种非常好的分类…

都说go协程性能好,这次我们来试试java协程

java 协程原理 在Java中&#xff0c;协程&#xff08;Coroutine&#xff09;是一种轻量级的线程解决方案&#xff0c;它可以在代码中实现类似于多线程的并发操作&#xff0c;但不涉及线程的创建和切换开销。 在传统的Java多线程编程模型中&#xff0c;线程的切换开销较大&…

18.本地存储

18.1本地存储分类- localStorage 1.作用: 可以将数据永久存储在本地(用户的电脑)&#xff0c;除非手动删除&#xff0c;否则关闭页面也会存在 2.特性: ●可以多窗口(页面)共享(同一浏览器可以共享) ●以键值对的形式存储使用&#xff0c;键值除了数字型都要加引号 3.语法 存…

一站式自动化测试平台-Autotestplat

3.1 自动化平台开发方案 3.1.1 功能需求 3.1.3 开发时间计划 如果是刚入门、但有一点代码基础的测试人员&#xff0c;大概 3 个月能做出演示版(Demo)进行自动化测试&#xff0c;6 个月内胜任开展工作中项目的自动化测试。 如果是有自动化测试基础的测试人员&#xff0c;大概 …

【C# 基础精讲】抽象类与接口

抽象类&#xff08;Abstract Class&#xff09;和接口&#xff08;Interface&#xff09;是面向对象编程中两种重要的概念&#xff0c;它们用于定义类的结构、行为和关系&#xff0c;是实现多态性、代码复用和系统设计的关键手段。在C#及其他面向对象编程语言中&#xff0c;抽象…

一生一芯3——ubuntu下显示器扩展

刚进ubuntu时不知道如何完成屏幕扩展&#xff0c;查阅后发现是显卡驱动问题&#xff0c;这里需要调整内置显示器的驱动 打开附加驱动 选择显卡驱动如上&#xff08;其他没试过&#xff09; 应用更改 -> 下载后重启 重启完成后扩展显示器上就有显示了 在设置中调整显示屏顺…

kriging-contour前端克里金插值

先看效果&#xff1a; 本项目在kriging-contour插件基础上进行了封装&#xff0c;增加了自定义区域插值&#xff0c;gitbub地址。

财报解读:上半年营收净利双增长,珀莱雅已成为真正的国货之光?

夏季炎热&#xff0c;防晒类产品的销量暴涨。根据千牛数据&#xff0c;防晒衣今年5月全网搜索人数同比增长15%&#xff0c;加购人数同比增长29.8%&#xff0c;访问人数同比增加42%。消费者狂热的防晒需求&#xff0c;孕育着巨大的商机&#xff0c;许多企业开始瞄准这一机会。而…

汇编指令练习

1.大小比较&#xff08;循环&#xff09; start: /*mov r0,#0x9mov r1,#0xfb LoopLoop:cmp r0,r1beq stopsubhi r0,r0,r1subcc r1,r1,r0b Loop stop:b stop.end 仿真图 2. 1到100之和 start:mov r0,#0x1mov r1,#0x0b sum sum:add r1,r1,r0add r0,r0,#0x1cmp r0,#0x65beq sto…

l2行情推送接口执行步骤,(sinal2接口)需要哪些开发源码?

L2行情推送接口是一种实时行情数据接口&#xff0c;用于获取股票市场深度行情数据&#xff08;Level 2行情数据&#xff09;。下面是L2行情推送接口的一般过程&#xff1a; 1. 接口订阅&#xff1a;开发者需要先与数据服务提供商或股票交易所建立连接&#xff0c;并订阅L2行情…

msvcp120.dll怎么重新安装方法?msvcp120.dll丢失一招修复

msvcp120.dll是许多应用程序和游戏所依赖的文件&#xff0c;因此它的缺失或损坏可能会导致这些程序无法正常运行。这使得修复msvcp120.dll问题变得非常重要&#xff0c;尤其是对于经常使用这些应用程序的用户来说。修复msvcp120.dll错误的方法多种多样&#xff0c;包括重新安装…

Java SE 学习笔记(十)—— 正则表达式

目录 1 引言2 常用匹配规则2.1 字符类2.2 预定义的字符类2.3 贪婪的量词 3 正则表达式匹配的 API4 正则表达式应用4.1 正则表达式常见应用案例4.2 正则表达式在字符串方法中的使用4.3 正则表达式爬取信息 1 引言 &#x1f60d; 正则表达式可以用一些规定的字符来制定规则&#…

四步搭建自己的专属 ChatGPT(附开源代码)

在未来&#xff0c;ChatGPT将成为人工智能应用领域的支柱&#xff0c;推动人机交互、智能客服和在线教育等领域的发展。使用ChatGPT能够轻松应对各种语言任务&#xff0c;提高工作效率&#xff0c;带来更多的便利和创新。 软件架构 java后台技术采用renren框架&#xff1a;spr…