当前位置: 首页 > news >正文

【贪心 图论】517. 超级洗衣机|分数未知

本文涉及知识点

C++贪心
C++图论

LeetCode517. 超级洗衣机

假设有 n 台超级洗衣机放在同一排上。开始的时候,每台洗衣机内可能有一定量的衣服,也可能是空的。
在每一步操作中,你可以选择任意 m (1 <= m <= n) 台洗衣机,与此同时将每台洗衣机的一件衣服送到相邻的一台洗衣机。
给定一个整数数组 machines 代表从左至右每台洗衣机中的衣物数量,请给出能让所有洗衣机中剩下的衣物的数量相等的 最少的操作步数 。如果不能使每台洗衣机中衣物的数量相等,则返回 -1 。

示例 1:
输入:machines = [1,0,5]
输出:3
解释:
第一步: 1 0 <-- 5 => 1 1 4
第二步: 1 <-- 1 <-- 4 => 2 1 3
第三步: 2 1 <-- 3 => 2 2 2
示例 2:

输入:machines = [0,3,0]
输出:2
解释:
第一步: 0 <-- 3 0 => 1 2 0
第二步: 1 2 --> 0 => 1 1 1
示例 3:

输入:machines = [0,2,0]
输出:-1
解释:
不可能让所有三个洗衣机同时剩下相同数量的衣物。

提示:
n == machines.length
1<=n<=1041 <= n <= 10^41<=n<=104
0<=machines[i]<=1050 <= machines[i] <= 10^50<=machines[i]<=105

图论

每一步⟺\iffi↔i+1,0≤i<N−1i \leftrightarrow i+1,0 \le i < N-1ii+1,0i<N1选择若干条边,然后将这些边全部改成有有向边。
avg = ∑nums÷N\sum nums \div Nnums÷N,如果avg不是整数,无解。
性质一:任意一条边不会在某次操作向左,另外一次操作向右。如果存在,同时取消。
性质二:x = ∑nums[0∼i]−avg×(i+1)\sum nums[0\sim i]-avg \times (i+1)nums[0i]avg×(i+1)
{不需要i到i+1的边0==x向右x>0向左x<0\begin{cases} 不需要i到i+1的边 && 0==x \\ 向右 && x > 0 \\ 向左 && x < 0\\ \end{cases}不需要ii+1的边向右向左0==xx>0x<0
边数 = |x|。
本题的答案是max⁡∣x∣\max |x|maxx

代码

class Solution {
public:int findMinMoves(vector<int>& machines) {m_c = machines.size();int iTotal = std::accumulate(machines.begin(), machines.end(), 0);if (0 != iTotal % m_c){return -1;}const int avg = iTotal / m_c;int iLeftNeed = 0;int iRet = 0;for (int i = 0; i < m_c; i++){const int iCurNeed = avg - machines[i];const int iRightNeed = -iCurNeed - iLeftNeed;		iRet = max(iRet, max(iLeftNeed,0) + max(0, iRightNeed));iLeftNeed += iCurNeed;}return iRet;}int m_c;
};

扩展阅读

我想对大家说的话
工作中遇到的问题,可以按类别查阅鄙人的算法文章,请点击《算法与数据汇总》。
学习算法:按章节学习《喜缺全书算法册》,大量的题目和测试用例,打包下载。重视操作
有效学习:明确的目标 及时的反馈 拉伸区(难度合适) 专注
员工说:技术至上,老板不信;投资人的代表说:技术至上,老板会信。
闻缺陷则喜(喜缺)是一个美好的愿望,早发现问题,早修改问题,给老板节约钱。
子墨子言之:事无终始,无务多业。也就是我们常说的专业的人做专业的事。
如果程序是一条龙,那算法就是他的是睛
失败+反思=成功 成功+反思=成功

视频课程

先学简单的课程,请移步CSDN学院,听白银讲师(也就是鄙人)的讲解。
https://edu.csdn.net/course/detail/38771
如何你想快速形成战斗了,为老板分忧,请学习C#入职培训、C++入职培训等课程
https://edu.csdn.net/lecturer/6176

测试环境

操作系统:win7 开发环境: VS2019 C++17
或者 操作系统:win10 开发环境: VS2022 C++17
如无特殊说明,本算法用**C++**实现。

http://www.dtcms.com/a/615373.html

相关文章:

  • php网站开发个人网络营销渠道的类型有哪些
  • Java 基于分支和循环结构的专项实验
  • 电商网站建设与维护网站添加多个关键词
  • 网站虚拟主机有什么用唐山网站建设400多少钱
  • 住房和城乡建设部网站中国建造师网西安网络推广网站优化
  • 51单片机--DHT11温湿度传感器实验代码
  • 企业网站的标题关键词系统平台
  • 移动电子商务平台就是手机网站前端培训多少钱
  • 批处理脚本之环境控制、参数处理与数据流
  • 网站 整站 抓取建设的网站属于固定资产么
  • 17网一起做网站广州网站是每年都要付费吗
  • 长沙网站推广服务公司给网站做脚本算违法吗
  • 企业网站视频栏目建设方案做网站费用
  • C++ 折半搜索(Meet-in-the-Middle):突破枚举瓶颈的高效算法
  • 了解一下长城汽车
  • wordpress网站名称中文域名注册官网
  • wordpress可以建哪些网站吗如何用网站模板
  • 网上发布信息的网站怎么做wordpress更新了固定连接文章失效
  • 华为官方网站进入网站背景特效
  • Unity 实现 ScrollBar 值变化控制 Panel 位置的方法
  • 网站建设 南京无需代码制作app软件
  • PCB之包地处理
  • 电解电容使用寿命与纹波电流修正系数
  • 漫画网站php源码网站建设组织架构
  • 帮人做ppt的网站工作服图片大全
  • 数据结构与算法:树的重心
  • JavaScript 中,原型链的**最顶端(终极原型)只有一个——`Object.prototype`
  • 建筑招聘网站哪个好做钢材生意选什么网站
  • 防城港做网站用服务器做网站空间
  • 2025大学生数学竞赛1-2(非数学类)