尧图网络 高端网站定制 · 原创设计
免费咨询热线
400-888-6620
免费获取方案
最小操作次数使数组元素相等 III【力扣LeetCode  每日一题】
3736. 最小操作次数使数组元素相等 III网页链接力扣LeetCode力扣LeetCode 每日一题完成每日打卡即可获得力扣积分。获得相应数量的积分能在【力扣商店】换取相应奖品助力每日有题做丰盈积分日益多题目描述给你一个整数数组nums。在一步操作中你可以将任意单个元素nums[i]的值增加 1。返回使数组中的所有元素都相等所需的最小总操作次数。输入描述一个整数数组nums。输出描述返回使数组中的所有元素都相等所需的最小总操作次数。示例示例 1输入nums [2,1,3]输出3解释使所有元素相等的操作如下将nums[0] 2增加 1变为 3。将nums[1] 1增加 1变为 2。将nums[1] 2增加 1变为 3。现在nums中的所有元素都等于 3。最小总操作次数为 3。示例 2输入nums [4,4,5]输出2解释使所有元素相等的操作如下将nums[0] 4增加 1变为 5。将nums[1] 4增加 1变为 5。现在nums中的所有元素都等于 5。最小总操作次数为 2。数据范围1 ≤ nums.length ≤ 100 1 \le \text{nums.length} \le 1001≤nums.length≤1001 ≤ nums [ i ] ≤ 100 1 \le \text{nums}[i] \le 1001≤nums[i]≤100解题思路本题是贪心目标值选择 差值求和问题。每次操作只能将某个元素增加1不能减少。因此最终所有元素相等时目标值不可能小于数组当前的最大值否则最大值元素无法通过“增加”变成更小的值。所以最优目标值就是数组的最大值。1. 为什么目标值取最大值设数组最大值为M max ⁡ ( n u m s ) M\max(nums)Mmax(nums)由于只能对元素做加1操作若最终目标值小于M则当前最大元素M无法降低到目标值不可行若最终目标值大于M则所有元素都需要继续增加操作次数只会更多因此目标值取M时最优。2. 计算最少操作次数对于任意元素nums[i]要变成M需要增加M − n u m s [ i ] M - nums[i]M−nums[i]次。把所有元素的增加次数累加得到总操作次数∑ i 0 n − 1 ( M − n u m s [ i ] ) \sum_{i0}^{n-1} \bigl(M - nums[i]\bigr)i0∑n−1​(M−nums[i])化简得n × M − ∑ i 0 n − 1 n u m s [ i ] n \times M - \sum_{i0}^{n-1} nums[i]n×M−i0∑n−1​nums[i]代码正是按这个公式计算returnranges::max(a)*a.size()-reduce(a.begin(),a.end(),0);其中ranges::max(a)求数组最大值Ma.size()是数组长度nreduce(a.begin(), a.end(), 0)求数组元素总和。3. 示例验证对于nums [2,1,3]最大值M 3总和为2 1 3 6答案为3 × 3 − 6 3 3 \times 3 - 6 33×3−63与示例输出一致。对于nums [4,4,5]最大值M 5总和为4 4 5 13答案为3 × 5 − 13 2 3 \times 5 - 13 23×5−132与示例输出一致。4. 复杂度分析求最大值O ( n ) O(n)O(n)求数组总和O ( n ) O(n)O(n)总时间复杂度为O ( n ) O(n)O(n)只使用常数个额外变量空间复杂度为O ( 1 ) O(1)O(1)。总结由于操作只能增加元素最终相等值至少是数组最大值。取最大值作为目标值时总操作次数最小答案为n × max ⁡ ( n u m s ) − ∑ n u m s [ i ] n \times \max(nums) - \sum nums[i]n×max(nums)−∑nums[i]即最大值乘以数组长度再减去数组元素总和。整体只需一次线性扫描时间复杂度为O ( n ) O(n)O(n)。代码内容classSolution{public:intminMoves(vectorinta){returnranges::max(a)*a.size()-reduce(a.begin(),a.end(),0);}};
RELATED

相关推荐

asyncio.run() cannot be called from a running event loop:在 async 函数里该怎么改

asyncio.run() cannot be called from a running event loop:在 async 函数里该怎么改

把一个本来能在命令行运行的异步示例搬进 Web 框架的 async 处理函数或支持顶层 await 的交互环境时,常见报错是: RuntimeError: asyncio.run() cannot be called from a running event loop这不是“异步函数不能调用异步函数”,而是当前线程…

📅 2026/11/5 2:00:59
Opus 4.8快速模式11月30日移除:两条迁移路径怎么选?

Opus 4.8快速模式11月30日移除:两条迁移路径怎么选?

如果 Claude Code 仍在使用 Opus 4.8,并且打开了快速模式,需要在 11 月 30 日前选择一条路径:继续用快速模式,就切换到支持它的模型;继续用 Opus 4.8,就关闭快速模式。 官方文档明确:Opus 4.8 快…

📅 2026/11/5 2:00:59
百炼Memory写入后搜不到?先查异步回执、规则和记忆类型

百炼Memory写入后搜不到?先查异步回执、规则和记忆类型

执行 bl memory add 后拿到了 event_id,紧接着检索却为空,应该重新提交吗?先别重复写入。这个 ID 代表提交事件,抽取可能还在后台继续;真正用于查看和修改记忆节点的,是 memory_node_id。 百炼当前 CLI 命令…

📅 2026/11/5 2:00:59
MORE NEWS

更多资讯

📰

对话式诊断系统AMIE:从主诉到鉴别诊断的对话机制与评测体系

医学问诊这件事,长期以来有个尴尬的现实:患者描述症状是模糊的、跳跃的、带情绪的,而医生的诊断推理是结构化的、收敛的、讲证据的。这两者之间的鸿沟,靠一个医学院读八年的人去填,成本极高。大模型进来之后&#xff0…

📰

Linux USB设备管理:从识别到自动挂载的完整指南

1. 为什么USB设备在Linux上总像“薛定谔的U盘”干运维和嵌入式调试这些年,我经手过的USB设备五花八门:U盘、移动硬盘、串口转接板、USB转网口、工业相机、加密狗、甚至还有拿USB接口供电的小风扇。每次换一台新机器或者重装系统,总有人问我同…

📰

Python租房数据分析系统:从爬虫到机器学习实战

1. 项目概述:租房数据分析系统的核心价值最近刚完成一个基于Python的租房数据分析系统,这个项目完美融合了机器学习算法与大数据处理技术,特别适合计算机专业同学作为毕业设计选题。系统通过Scrapy爬虫抓取全网房源数据,利用Djang…

📰

Elasticsearch集群健康状态维护与性能优化实战

1. 项目概述在大数据环境下维护Elasticsearch集群的健康状态,是每个运维工程师和开发人员都会面临的挑战。当集群健康值频繁出现yellow甚至red状态时,不仅会影响查询性能,更可能导致数据丢失风险。本文将分享我在管理PB级Elasticsearch集群过…

📰

MySQL DQL数据查询语言全解析与优化实践

1. MySQL DQL数据查询语言全解析作为数据库操作中最频繁使用的部分,DQL(Data Query Language)数据查询语言承担着80%以上的数据库交互工作。今天我将结合十年MySQL优化经验,带你深入掌握DQL的完整语法体系与实战技巧。先看一个典型电商场景:我…

📰

AI能力构建:6C模型驱动企业数字化转型

1. 从工具到能力:重新定义AI的价值维度当我们在会议室里第17次讨论"如何让AI真正赋能业务"时,我突然意识到:我们一直在用错度量衡。就像用温度计测量重量,大多数企业把AI当作"工具集"来采购,却忽略…

TODAY

今日更新

THIS WEEK

本周精选

THIS MONTH

本月热门

读完文章,想聊聊您的网站?

告诉我们您的行业与需求,资深顾问一对一梳理方案与报价,全程免费。

📞 💬