洗衣机传递衣服
洗衣机排成一排,每次某些洗衣机向邻居传一件衣服,要几次能使各洗衣机衣服数相等?
int findMinMoves(vector<int>& machines) {
const int N = machines.size();
int total = 0;
for (int machine : machines)
total += machine;
if (total % N != 0) return -1;
// 1. 每个洗衣机要发出衣服:out[i] = machines[i]-avg,
// 一次只能发一件,需要out[i]次
// 2. 通过本机向另一侧发送的件数 x = abs( sum(out[0..i] )),
// sum为正向右流、为负向左流,又需要x次
int avg = total / N;
int sum = 0;
int ans = 0;
for (int i = 0; i < N; i++) {
int out = machines[i] - avg;
sum += out; // sum(out[0..i])
ans = max({ans, out, abs(sum)});
}
return ans;
}