每日一练 2024.5.16 (补 2024.5.15)

news2025/1/20 5:11:33
题目:

给定一个 正整数 数组 beans ,其中每个整数表示一个袋子里装的魔法豆的数目。

请你从每个袋子中 拿出 一些豆子(也可以 不拿出),使得剩下的 非空 袋子中(即 至少还有一颗 魔法豆的袋子)魔法豆的数目 相等。一旦把魔法豆从袋子中取出,你不能再将它放到任何袋子中。

请返回你需要拿出魔法豆的 最少数目

示例 1:

输入:beans = [4,1,6,5]
输出:4
解释:
- 我们从有 1 个魔法豆的袋子中拿出 1 颗魔法豆。
  剩下袋子中魔法豆的数目为:[4,0,6,5]
- 然后我们从有 6 个魔法豆的袋子中拿出 2 个魔法豆。
  剩下袋子中魔法豆的数目为:[4,0,4,5]
- 然后我们从有 5 个魔法豆的袋子中拿出 1 个魔法豆。
  剩下袋子中魔法豆的数目为:[4,0,4,4]
总共拿出了 1 + 2 + 1 = 4 个魔法豆,剩下非空袋子中魔法豆的数目相等。
没有比取出 4 个魔法豆更少的方案。

示例 2:

输入:beans = [2,10,3,2]
输出:7
解释:
- 我们从有 2 个魔法豆的其中一个袋子中拿出 2 个魔法豆。
  剩下袋子中魔法豆的数目为:[0,10,3,2]
- 然后我们从另一个有 2 个魔法豆的袋子中拿出 2 个魔法豆。
  剩下袋子中魔法豆的数目为:[0,10,3,0]
- 然后我们从有 3 个魔法豆的袋子中拿出 3 个魔法豆。
  剩下袋子中魔法豆的数目为:[0,10,0,0]
总共拿出了 2 + 2 + 3 = 7 个魔法豆,剩下非空袋子中魔法豆的数目相等。
没有比取出 7 个魔法豆更少的方案。

提示:

  • 1 <= beans.length <= 105
  • 1 <= beans[i] <= 105
解题:
  1. 排序: 首先,我们对数组 beans 进行排序。排序是必要的,因为我们希望按照升序检查各个袋子中的魔法豆数目,以确定在使所有非空袋子中的魔法豆数目相等的过程中需要移除多少魔法豆。

  2. 累加总数: 然后,我们遍历数组 beans,并计算所有袋子中的魔法豆总数。这一步是为了让我们知道总共有多少魔法豆,从而在后续步骤中计算需要移除的魔法豆数量。

  3. 查找最小移除数目: 接下来,初始化一个变量来记录最少需要移除的魔法豆数目,我们假设开始时为长整型的最大值。然后,我们再次遍历 beans 数组,对于数组中的每个元素(在这种情况下,每个元素代表排序后的袋子中魔法豆的数量),我们计算在假设该袋子后的所有袋子都要有相同数量的魔法豆情况下(即该数量等于当前元素),需要移除的魔法豆数目。这可以通过从总魔法豆数中减去乘以剩余袋子数(包括当前袋子)的当前魔法豆数来实现。

  4. 更新最小移除数目: 在每次迭代中,我们比较并更新记录的最小移除魔法豆数目。计算方式为当前所有魔法豆数目减去剩下的(紧随其后的)袋子数乘以当前袋子的魔法豆数目。

  5. 返回结果: 当遍历完成后,记录的最小移除数目即为结果。

代码:
class Solution {
    public long minimumRemoval(int[] beans) {
        Arrays.sort(beans);
        long totalBeans = 0;
        for (int bean : beans) {
            totalBeans += bean;
        }

        long minRemovals = Long.MAX_VALUE;
        long removalsTillNow = 0;
        int n = beans.length;

        for (int i = 0; i < n; i++) {
            // 当前考虑的豆子数量与剩余的袋子相乘得到的应该保留的总豆子数量,从所有豆子中减去这个数量得到移除的数量
            long currentRemovals = totalBeans - (long) (beans[i]) * (n - i);
            // 更新最小移除数
            minRemovals = Math.min(minRemovals, currentRemovals);
        }

        return minRemovals;
    }
}
知识点解析:
  1. 数组排序 (Arrays.sort): 这是Java中使用的标准排序方法,用于对数组进行排序。在这段代码中,我们使用了 Arrays.sort(beans) 来按升序排列给定的魔法豆数组。

  2. 增强型for循环 (for (int bean : beans)): Java的增强型for循环用于迭代数组或集合中的每个元素。在这里,它被用来遍历魔法豆数组,并计算总的魔法豆数目。

  3. 使用长整型变量 (long): 由于可能会有大量的魔法豆需要处理,因此这里使用了 long 类型的变量来存储可能超过 int 范围的数值。

  4. Long.MAX_VALUE: 这是 long 类型变量能存储的最大值。它被用作初始化移除魔法豆的最小数量,为了在比较过程中能找到实际的最小值。

  5. Math.min 方法: 这个方法用来找到两个数中的最小值。在这里,它用来更新并寻找可能的最小移除魔法豆的数目。

  6. 简单数学计算 (totalBeans - (long) (beans[i]) * (n - i)): 这个表达式被用来计算如果使所有非空袋子的魔法豆数目都等于当前袋子中的魔法豆数目时,需要从总数中移除多少魔法豆。

知识点描述应用
Arrays.sort对数组进行排序。对魔法豆的数组按数量升序排列。
增强型for循环用于遍历数组或集合元素。遍历魔法豆数组计算总数。
long 类型变量存储大范围整数。存储可能的大量魔法豆总数。
Long.MAX_VALUElong 类型的最大值。初始化最小移除魔法豆数目的比较基准。
Math.min 方法返回两个数中的最小值。更新最小移除魔法豆数目。

2024.5.15

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

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

相关文章

Docker mysql主从同步

1. 在主节点注册一个账号&#xff0c;用于子节点访问主节点 #mysql 1主2从&#xff0c;先创建主节点 ,注意 \ 后面不要带空格 docker run --name mysql-m \ -v /usr/local/mysql/data:/var/lib/mysql \ -v /usr/local/mysql/conf:/etc/mysql/conf.d \ -v /usr/local/mysql/log:…

20231911 2023-2024-2 《网络攻防实践》实践九报告

1.实践内容 1.1 缓冲区 缓冲区是内存空间的一部分&#xff0c;在内存中预留了一定的存储空间&#xff0c;用来暂时保存输入和输出等I/O操作的一些数据&#xff0c;这些预留的空间就叫做缓冲区。 1.2 shellcode shellcode是一段用于利用软件漏洞而执行的代码&#xff0c;也可以…

哪款桌面便签app能帮助我提升工作效率

作为上班族&#xff0c;我们每天都要处理大量的工作事项&#xff0c;从策划方案到处理邮件&#xff0c;每一个环节都需高效且有条不紊。在这样的工作环境下&#xff0c;提升效率显得尤为重要。而选择一款优秀的桌面便签app&#xff0c;无疑是提高工作效率的关键。 桌面便签app…

6-10 阶乘计算升级版

void Print_Factorial ( const int N ) {if(N<0){printf("Invalid input");return;} int nN;int a[10000]{};a[0]1; //0和1的阶乘都是1&#xff0c;同时又是用该个位去&#xff0c;所以初始化为1&#xff1b;int i,j;int len0;//当前数组所占的最大下标in…

多客开源】游戏陪玩系统,游戏陪玩源码,游戏陪玩语音社交源码运营版游戏陪玩平台源码/tt语音聊天/声优服务/陪玩系统源码开黑/约玩源码

介绍 我们针对陪玩app源码市场的发展趋势&#xff0c;整合市面上主流陪玩app应用功能&#xff0c;自主开发了多客陪玩系统源码&#xff0c;并可为客户提供全部原生陪玩源码&#xff0c;进行二次开发&#xff0c;打造适用于线上游戏陪玩、语音聊天、心理咨询、情感陪伴等业务场…

NOC初赛成绩,你们都查到了吗?

NOC大赛部分编程赛道要开始复赛了&#xff0c;2024信息素养大赛初赛及NOC复赛这篇就够了&#xff01;初赛结束后&#xff0c;很多家长和学生还没有查到是否晋级复赛&#xff0c;因为网站卡的出现了各种问题&#xff0c;主要集中在打不开&#xff0c;验证码错误等&#xff0c;根…

【数据分析实战】华住与锦江市场布局与未来趋势解析Python数据分析采集爬虫

文章目录 引言数据采集和展示数据采集数据预处理 数据分析与结果国内门店数量对比结果可视化结果分析 酒店平均房间数对比Code结果可视化结果分析 近六年开店数量对比结果可视化结果分析 写在最后 引言 随着旅游经济的持续发展&#xff0c;中国酒店行业正迅速壮大&#xff0c;…

基于51单片机的非接触式无线红外测温

基于51单片机的无线红外测温 &#xff08;程序&#xff0b;原理图&#xff0b;设计报告&#xff09; 功能介绍 具体功能&#xff1a; 1.采用红外温度传感器测温并用LCD1602显示&#xff1b; 2.按键为启动按键、保存按键、显示数据按键&#xff0c;可以实现对温度数值的控制…

InnoDB 事务处理机制

文章目录 前言1. 事务处理挑战1.1 事务机制处理的问题1.2 并发事务带来的问题 2. InnodDB 和 ACID 模型2.1 Innodb Buffer Pool2.2 Redo log2.3 Undo log2.4 应用案例 3. 隔离级别和锁机制3.1 事务隔离级别3.1.1 READ UNCOMMITTED3.1.2 READ COMMITTED3.1.3 REPEATABLE READ3.1…

AndroidStudio集成高德地图后出现黑屏并报错

报错内容为&#xff1a;No implementation found for void com.autonavi.base.ae.gmap.GLMapEngine.nativeMainThreadTrigger(int, long) (tried Java_com_autonavi_base_ae_gmap_GLMapEngine_nativeMainThreadTrigger and Java_com_autonavi_base_ae_gmap_GLMapEngine_nativeM…

2024CCPC郑州邀请赛暨河南省赛(A,B,C,D,F,G,H,J,K,L,M)

2024 National Invitational of CCPC (Zhengzhou), 2024 CCPC Henan Provincial Collegiate Programming Contest 2024 年中国大学生程序设计竞赛全国邀请赛&#xff08;郑州&#xff09;暨第六届 CCPC 河南省大学生程序设计竞赛 比赛链接 这场的题说实话难度其实都不大&…

数仓建模理论 之 维度建模

说起维度建模&#xff0c;你不得不知道以下几个概念&#xff1a;事实表、维度表、星型模型、雪花模型、星座模型 维度建模 Ralph Kimball推崇数据集市的集合为数据仓库&#xff0c;同时也提出了对数据集市的维度建模&#xff0c;将数据仓库中的表划分为事实表、维度表两种类型…

浏览器插件Video Speed Controller(视频倍速播放),与网页自身快捷键冲突/重复/叠加的解决办法

浏览器插件Video Speed Controller&#xff08;视频倍速播放&#xff09;&#xff0c;与网站自身快捷键冲突/重复/叠加的解决办法 插件介绍问题曾今尝试的办法今日发现插件列表中打开Video Speed Controller的设置设置页面翻到下面&#xff0c;打开实验性功能。将需要屏蔽的原网…

Invicti v24.5.0 for Windows - Web 应用程序安全测试

Invicti v24.5.0 for Windows - Web 应用程序安全测试 Invicti Standard v24.5.0 - 7 May 2024 请访问原文链接&#xff1a;Invicti v24.5.0 for Windows - Web 应用程序安全测试&#xff0c;查看最新版。原创作品&#xff0c;转载请保留出处。 作者主页&#xff1a;sysin.o…

huggingface笔记:使用accelerate加速

1 介绍 随着模型规模的增大&#xff0c;并行处理已成为在有限硬件上训练大型模型和提高训练速度的重要策略。Hugging Face 创建了Accelerate库&#xff0c;帮助用户在任何类型的分布式环境中轻松训练Transformers模型&#xff0c;无论是单机多GPU还是跨多机的多GPU 2 创建Acce…

详解动态规划之01背包问题及其空间压缩(图文并茂+例题讲解)

1. 动态规划问题的本质 记忆化地暴力搜索所有可能性来得到问题的解 我们常常会遇到一些问题&#xff0c;需要我们在n次操作&#xff0c;且每次操作有k种选择时&#xff0c;求出最终需要的最小或最大代价。处理类似的问题&#xff0c;我们一般需要遍历所有的可能性(相当于走一遍…

(规格参考)ADP5360ACBZ-1-R7 电量计 电池管理IC,ADP5072ACBZ 双通道直流开关稳压器,ADL5903ACPZN 射频检测器

1、ADP5360ACBZ-1-R7&#xff1a;具有超低功耗电量计、电池保护功能的先进电池管理PMIC 功能&#xff1a;电池保护 电池化学成份&#xff1a;锂离子/聚合物 电池数&#xff1a;1 故障保护&#xff1a;超温&#xff0c;过压 接口&#xff1a;I2C 工作温度&#xff1a;-40C ~ 85…

安全且高效数据传输技术:Filelink跨网文件传输

Filelink跨网文件传输是一种高效、便捷的数据传输技术&#xff0c;它打破了传统文件传输方式的局限&#xff0c;实现了跨网络、跨平台的无缝传输。在企业跨网文件传输&#xff0c;Filelink都以其卓越的性能和稳定性赢得了广泛的认可。 在以往的文件传输过程中&#xff0c;我们常…

分享如何通过定时任务调用lighthouse前端测试脚本+在持续集成测试中调用lighthouse前端测试脚本

最近写了个小工具来优化lighthouse在实际工作中的使用&#xff0c;具体实现了&#xff1a;通过定时任务调用前端测试脚本在持续集成测试中调用前端测试脚本。由于在公司中已经应用&#xff0c;所以就不能提供源码了&#xff0c;这里简单说一下实现思路&#xff0c;希望可以帮助…

数仓架构之为什么要进行数仓分层

数仓分层这个概念想必大家都很熟悉&#xff0c;不管是在实际的开发工作当中会用的&#xff0c;还是在面试官面试你的时候会问到&#xff1a;你之前的项目是按照什么分层的&#xff0c;分哪几层&#xff0c;数仓分层有什么好处&#xff0c;举个栗子说说。 简而言之&#xff0c;…