Leetcode 517.超级洗衣机
超级洗衣机
假设有 n 台超级洗衣机放在同一排上。开始的时候,每台洗衣机内可能有一定量的衣服,也可能是空的。
在每一步操作中,你可以选择任意 m (1 ≤ m ≤ n) 台洗衣机,与此同时将每台洗衣机的一件衣服送到相邻的一台洗衣机。
给定一个非负整数数组代表从左至右每台洗衣机中的衣物数量,请给出能让所有洗衣机中剩下的衣物的数量相等的最少的操作步数。如果不能使每台洗衣机中衣物的数量相等,则返回 -1。
示例 1:
输入: [1,0,5]
输出: 3
解释:
第一步: 1 0 <-- 5 => 1 1 4
第二步: 1 <-- 1 <-- 4 => 2 1 3
第三步: 2 1 <-- 3 => 2 2 2
示例 2:
输入: [0,3,0]
输出: 2
解释:
第一步: 0 <-- 3 0 => 1 2 0
第二步: 1 2 --> 0 => 1 1 1
示例 3:
输入: [0,2,0]
输出: -1
解释:
不可能让所有三个洗衣机同时剩下相同数量的衣物。
提示:
- n 的范围是 [1, 10000]。
- 在每台超级洗衣机中,衣物数量的范围是 [0, 1e5]。
算法
(线性遍历,答案分解) O(n)
由于每次操作每台洗衣机只能选择向左或者向右运送一件衣服,且多个洗衣机可以并行同时运送,故必定存在一个洗衣机,它运送的衣服数量等于答案。
我们可以枚举每一台洗衣机,计算经过它运送的衣服的数量。
首先如果衣服的总数量是洗衣机的整数倍,则必定存在一个解;否则返回 -1。
然后逐一枚举洗衣机,假设当前枚举的洗衣机编号为 i,则统计 left_sum = [0, i - 1] 中衣服的总数量和 right_sum = [i + 1, n - 1] 中衣服的总数量,若发现 left_sum < i * avg,即 i 左边的衣服数量少,故需要经过这台洗衣机从右向左运送的衣服数量为 r_2_l = i * avg - left_sum。从左向右运行的衣服数量 l_2_r 同理。
r_2_l + l_2_r 求和就是这台洗衣机的工作量,对每一台洗衣机都这样求和得到工作量,取工作量最大的洗衣机就是答案。
#include<vector>
#include<algorithm>
using namespace std;
class Solution {
public:
int findMinMoves(vector<int>& machines) {
int n = machines.size(), ans = 0;
int tot = accumulate(machines.begin(), machines.end(), 0);
if (tot % n != 0) return -1;
int avg = tot / n;
int right_sum = tot, left_sum = 0;
for (int i = 0; i < n; i++) {
right_sum -= machines[i];
int r_2_l = max(i * avg - left_sum, 0);
int l_2_r = max((n - i - 1) * avg - right_sum, 0);
ans = max(ans, l_2_r + r_2_l);
left_sum += machines[i];
}
return ans;
}
};
Leetcode 517.超级洗衣机的更多相关文章
- Java实现 LeetCode 517 超级洗衣机
517. 超级洗衣机 假设有 n 台超级洗衣机放在同一排上.开始的时候,每台洗衣机内可能有一定量的衣服,也可能是空的. 在每一步操作中,你可以选择任意 m (1 ≤ m ≤ n) 台洗衣机,与此同时将 ...
- [Swift]LeetCode517. 超级洗衣机 | Super Washing Machines
You have n super washing machines on a line. Initially, each washing machine has some dresses or is ...
- C#版(击败100.00%的提交) - Leetcode 372. 超级次方 - 题解
版权声明: 本文为博主Bravo Yeung(知乎UserName同名)的原创文章,欲转载请先私信获博主允许,转载时请附上网址 http://blog.csdn.net/lzuacm. Leetcod ...
- [LeetCode] Super Washing Machines 超级洗衣机
You have n super washing machines on a line. Initially, each washing machine has some dresses or is ...
- 517 Super Washing Machines 超级洗衣机
详见:https://leetcode.com/problems/super-washing-machines/description/ C++: class Solution { public: i ...
- Leetcode - 517 Super Washing Machines
今天开始定期记录本人在leetcode上刷题时遇到的有意思的题目. 517. Super Washing Machines You have n super washing machines ...
- Leetcode 372.超级次方
超级次方 你的任务是计算 ab 对 1337 取模,a 是一个正整数,b 是一个非常大的正整数且会以数组形式给出. 示例 1: 输入: a = 2, b = [3] 输出: 8 示例 2: 输入: a ...
- Leetcode 313.超级丑数
超级丑数 编写一段程序来查找第n个超级丑数. 超级丑数是指其所有质因数都是长度为 k 的质数列表 primes 中的正整数. 示例: 输入: n = 12, primes = [2,7,13,19] ...
- Java实现 LeetCode 372 超级次方
372. 超级次方 你的任务是计算 ab 对 1337 取模,a 是一个正整数,b 是一个非常大的正整数且会以数组形式给出. 示例 1: 输入: a = 2, b = [3] 输出: 8 示例 2: ...
随机推荐
- shp格式数据发布服务:postGIS + postgresql + geoserver
主要流程: ①使用postgresql创建数据库 ②下载安装postgis插件 ③在创建的数据库中使用postgis插件,执行下列语句 CREATE EXTENSION postgis; CREATE ...
- JavaScript模块化开发的那些事
模块化开发在编程开发中是一个非常重要的概念,一个优秀的模块化项目的后期维护成本可以大大降低.本文主要介绍了JavaScript模块化开发的那些事,文中通过一个小故事比较直观地阐述了模块化开发的过程. ...
- Windows底层开发前期学习准备工作
1.若对Windows底层开发没有兴趣,不建议继续深究, 若有些兴趣可以继续. 2. 先广泛打基础,比如C/ASM/C++/MFC,再学习Windows核心编程,对R3上的一些开发有所熟悉,再系统的学 ...
- 【BZOJ2733】[HNOI2012] 永无乡(启发式合并Splay)
点此看题面 大致题意: 给你一张图,其中每个点有一个权值,有两种操作:在两点之间连一条边,询问一个点所在联通块第\(k\)小的权值. 平衡树 看到第\(k\)小,应该不难想到平衡树. 为了练习\(Sp ...
- 【洛谷2216】[HAOI2007] 理想的正方形(二维RMQ)
点此看题面 大致题意: 求出一个矩阵中所有\(n*n\)正方形中极差的最小值. 另一种做法 听说这题可以用单调队列去做,但是我写了一个二维\(RMQ\). 二维\(RMQ\) \(RMQ\)相信大家都 ...
- latex-word
http://blog.sina.com.cn/s/blog_565e747c0100qxma.html 附:PowerPoint 中插入LaTeX公式的插件,IguanaTex,功能和TeXsWor ...
- 【6.20校内test】
反正考的不是很好吧,赶脚炸了啊qwq 然后这两天一直在忙一些神奇的事情,所以没有整理完 手动@water_lift T1:大美江湖: [题目背景] 细雪飘落长街,枫叶红透又一年 不只为故友流连,其实我 ...
- webpack4.x ,1基本项目构建 详解
1.先创建个文件夹 比如叫 webApp 用编译器打开 2.安装全局的webpack 和webpack-cli 及 webpack-dev-server 命令如下 npm install webpac ...
- session在C#一般处理程序的调用方式
在C#中有一个一般处理程序,可以快速地进行一些逻辑运算等功能,但在这个页面上,不能直接选择使用session进行页面间的值的传递,如何使得页面可以使用session呢 在页面开头写上 using Sy ...
- file_get_contents函数
今天迁移一个SDK项目到新的机子上,发现项目无法跑起来,报500错误,通过分析,发现原来是file_get_contents函数再作怪,代码如下 public function __construct ...