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: ...
随机推荐
- 基于mllib的协同过滤实战(电影推荐)
//加载需要的包 import org.apache.spark.rdd._ import org.apache.spark.mllib.recommendation.{ALS, Rating, Ma ...
- 项目移动后报error LNK1123
VS20101.解决方案窗口 项目|项目属性|配置属性|清单工具|输入和输出|嵌入清单 “是”改为“否”:2.项目|项目属性|配置属性|连接器|清单文件|嵌入清单 “是”改为“否”:3.对于64位的操 ...
- Sentinel spring-cloud-gateway adapter(1.6)异常错误之@EnableCircuitBreaker
sentinal 大坑 使用gateway adaper包出现@EnableCircuitBreaker did you forget include starter的异常 这时候千万不要学我引入cl ...
- 【转载】#229 - The Core Principles of Object-Oriented Programming
As an object-oriented language, c# supports the three core principles of object-oriented programming ...
- 基于GMap.NET地图下载器的开发和研究
基于GMap.NET地图下载器的开发和研究 软件下载地址:https://pan.baidu.com/s/1ay0aOm3fiZ35vlfD8kFYFw 1.地图浏览功能 可以浏览谷歌地图.百度.ar ...
- 切换Ubuntu超级管理员
对Ubuntu进行拷贝命令时,如果不是root用户,会出现权限不足的情况,无法操作
- es6之Object扩展及内部属性的总结
对象扩展: 1.Object.is(A,B) :比较两个值是否相等,取代===运算:只要值相等代表相等:其中NAN和NAN相等:+0和-0不相等: 2.Object.assign(target,sou ...
- mysql update 多表关联更新
UPDATE new_schedules_spider_static_schedule s join new_scac_port p on p.`PORT` = s.`PORT` and p.SCAC ...
- php使用curl获取文本出现中文乱码的解决办法
在使用php的curl获取远程html文本时出现了中文乱码. 解决办法的代码如下: $url = "www.ecjson.com";//获取页面内容$ch = curl_init( ...
- 01.VUE学习一
<!DOCTYPE html> <html> <head> <meta charset="utf-8"> <meta http ...