每日一练 2024.5.16 (补 2024.5.15)

题目:

给定一个 正整数 数组 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.mzph.cn/pingmian/13320.shtml

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

相关文章

2024汽车行业用户洞察与营销趋势白皮书

来源&#xff1a;小红书&寰球汽车&#xff1a;

设备接入物联网平台必须掌握的关键信息——青创智通

工业物联网解决方案-工业IOT-青创智通 设备接入物联网平台需要掌握的信息相当丰富且复杂&#xff0c;这涉及到多个层面&#xff0c;包括技术细节、平台选择、安全性考虑以及后期管理与维护等。以下将详细阐述设备接入物联网平台所需掌握的关键信息。 首先&#xff0c;我们需要…

【recast-navigation-js】通过websocket获取navmesh数据并初始化

目录 说在前面目录结构websocket服务器前端结果 说在前面 操作系统&#xff1a;windows 11浏览器&#xff1a;edge版本 124.0.2478.97recast-navigation-js版本&#xff1a;0.29.0golang版本&#xff1a;1.21.5 目录结构 D:. │ go.mod │ go.sum │ main.go // websocket …

Halcon 根据XYZ生成3D模型

Halcon 根据XYZ生成3D模型 x_points := [a_x_points, b_x_points, c_x_points]y_points := [a_y_points, b_y_points, c_y_points]z_points := [a_z_points, b_z_points, c_z_points]stop()gen_object_model_3d_from_points

风电功率预测 | 基于遗传算法优化BP神经网络实现风电功率预测(附matlab完整源码)

风电功率预测 风电功率预测 | 基于遗传算法优化BP神经网络实现风电功率预测(附matlab完整源码)完整代码风电功率预测 | 基于遗传算法优化BP神经网络实现风电功率预测(附matlab完整源码) 基于遗传算法优化BP神经网络是一种常见的方法,用于改进BP神经网络在风电功率预测中的性…

JavaScript-基本数据类型和变量

基本数据类型 JavaScript支持数字、字符串和布尔值3种基本数据类型 字符串型 字符串型是JavaScript用来表示文本的数据类型&#xff0c;字符串通常由单引号或双引号括起来&#xff0c;如果字符串存在特殊字符&#xff0c;可以用转义字符代替 数字型 数字型也是JavaScript中的基…

【数据链路层】以太网帧包解析

文章目录 以太网的帧结构解析数据链路层信息 以太网的帧结构 使用抓包工具&#xff0c;查看数据链路层信息&#xff1a; 解析数据链路层信息 &#xff08;1&#xff09;协议类型&#xff1a;代表上层的协议 &#xff08;IP00800 ARP00806 IPv686DD &#xff09; 如图中所示&a…

金蝶AAS-V9.0前后端部署

前言 包含金蝶AAS9.0部署&#xff0c;前端部署&#xff0c;后端部署。 金蝶AAS9.0部署 1. 下载金蝶AAS9.0安装包上传至服务器&#xff1b; 2. 解压安装包&#xff1b; unzip -d /opt/AAS-V9.0 AAS-V9.0.zip3. 配置JAVA路径&#xff1b; echo $JAVA_HOME vim /opt/AAS-9.0…

力扣HOT100 - 32. 最长有效括号

解题思路&#xff1a; 栈 class Solution {public int longestValidParentheses(String s) {int max 0;// 也可以使用 Stack<Integer> stacknew Stack<>();但Stack是遗留类&#xff0c;不推荐Deque<Integer> stack new LinkedList<>();stack.push(…

怎么做微信在线预约

在快节奏的现代生活中&#xff0c;我们总是追求更高效、更便捷的服务体验。而微信&#xff0c;这个拥有数亿用户的社交平台&#xff0c;早已不仅仅是一个聊天工具&#xff0c;它更是一个融合了多种功能的综合性服务平台。今天&#xff0c;就让我们一起探讨如何通过微信在线预约…

线程池的一些问题

核心线程数1.最大线程5.队列5.存活时间10s 1.场景一 如果核心线程数.被一直占用得不到释放.新进来1个任务.会怎么样?答: 会在队列中中死等. 只要进来的任务.不超过队列的长度,就会一直挡在队列中死等 package com.lin;import java.util.concurrent.Executors; import java.u…

通过阿里云的PAI基于开源LLM搭建RAG检索增强对话系统

5月9日参加阿里云AI云峰会活动&#xff0c;学习了下如何借助阿里云的PAI服务进行搭建RAG检索增加对话系统。 前提&#xff1a; 为了方便省钱&#xff0c;建议先通过免费的优惠圈&#xff0c;这样就可以先不花钱学习一下啦。开始实验之前&#xff0c;请务必打开 阿里云免费试用…

QT在场景中利用freetype实现独立的文字绘制子类QxFreeTypeTextItem

QT在场景中利用freetype实现独立的文字绘制子类QxFreeTypeTextItem&#xff0c;继上一章节讲过qt中如何编译freetype Qt编译和使用freetype矢量字库方法https://blog.csdn.net/wangningyu/article/details/138927379#QT利用freetype提取字库图片_qt freetype-CSDN博客文章浏览…

【SpringBoot】SpringBoot3-基本介绍

目录 环境基本介绍pom.xml启动器依赖管理机制分析为什么导入starter-web所有相关依赖都导入进来&#xff1f;为什么版本号都不用写&#xff1f;自定义版本号第三方的依赖 总结 自动配置机制理解默认的包扫描规则配置默认值按需加载自动配置总结 自动配置流程问题流程步骤流程总…

Python数据分析与数据可视化 概念

考试题型&#xff1a; 一、填空题&#xff08;1分*10&#xff09; 二、程序代码填空&#xff08;1分*20&#xff09; 三、读程序写结果&#xff08;10分*4&#xff09; 四、程序设计&#xff08;10分*1&#xff09; 五、问答题&#xff08;20分*1&#xff09; 考试范围&#x…

沃尔玛自建自养号测评的优势,提升产品排名的新选择

在沃尔玛平台上&#xff0c;产品排名和销量的提升对于卖家而言至关重要&#xff0c;而产品测评则是实现这一目标的有效途径。然而&#xff0c;市场上对于测评的需求激增&#xff0c;随之而来的是寻找测评服务的种种困难和风险。因此&#xff0c;越来越多的卖家选择自建自养号测…

cdn引入vue的项目嵌入vue组件——http-vue-loader 的使用——技能提升

最近在写MVC的后台&#xff0c;看到全是jq的写法&#xff0c;但是对于用惯了vue的我&#xff0c;真是让我无从下手。。。 vue的双向绑定真的很好用。。。 为了能够在cdn引入的项目中嵌入vue组件&#xff0c;则可以使用http-vue-loader了 步骤1&#xff1a;下载http-vue-loader…

使用TerraScan静态扫描KubernetsIaC文件

terrascan https://github.com/tenable/terrascan Terrascan 是基础架构即代码的静态代码分析器。Terrascan 允许&#xff1a; 将基础架构作为代码无缝扫描&#xff0c;以查找错误配置。监控已配置的云基础架构&#xff0c;以查找引入终端安全评估漂移的配置更改&#xff0…

10个必备功能跨境电商ERP开发全指南

跨境电商平台开发是当前电商行业的热门话题。随着全球贸易的不断发展&#xff0c;企业越来越关注并重视跨境电商ERP系统的开发和应用。在本文中&#xff0c;我们将深入探讨跨境电商ERP开发的必备功能&#xff0c;为您呈现全面的指南。 1. 跨境订单管理 跨境电商平台需要具备全…

go语言中Print,Printf和Println的区别

Print是Golang的fmt包中的内置函数&#xff0c;使用其操作数的默认格式打印格式并写入标准输出&#xff1b; Println是Golang的fmt包中的内置函数&#xff0c;用于在结尾处打印带有新行的消息到控制台。它需要零个或多个任意类型的参数&#xff0c;并使用空格分隔它们&#xff…