Super Washing Machines

hard array greedy

Problem

n washing machines on a line; in one move you can transfer 1 dress from any machine to one of its neighbours. Make all equal. Return min moves, or −1.

Inputmachines = [1,0,5]
Output3
If total % n != 0, return −1. Else scan left→right tracking deficit; answer is max bottleneck.

def find_min_moves(machines):
    n = len(machines); total = sum(machines)
    if total % n != 0: return -1
    avg = total // n
    bal = 0; ans = 0
    for x in machines:
        diff = x - avg
        bal += diff
        ans = max(ans, abs(bal), diff)
    return ans
function findMinMoves(machines) {
  const n = machines.length, total = machines.reduce((a, b) => a + b, 0);
  if (total % n !== 0) return -1;
  const avg = total / n;
  let bal = 0, ans = 0;
  for (const x of machines) {
    const diff = x - avg;
    bal += diff;
    ans = Math.max(ans, Math.abs(bal), diff);
  }
  return ans;
}
class Solution {
    public int findMinMoves(int[] machines) {
        int n = machines.length, total = 0;
        for (int x : machines) total += x;
        if (total % n != 0) return -1;
        int avg = total / n, bal = 0, ans = 0;
        for (int x : machines) {
            int diff = x - avg;
            bal += diff;
            ans = Math.max(ans, Math.max(Math.abs(bal), diff));
        }
        return ans;
    }
}
int findMinMoves(vector& machines) {
    int n = machines.size(), total = 0;
    for (int x : machines) total += x;
    if (total % n != 0) return -1;
    int avg = total / n, bal = 0, ans = 0;
    for (int x : machines) {
        int diff = x - avg;
        bal += diff;
        ans = max(ans, max(abs(bal), diff));
    }
    return ans;
}
Time: O(n) Space: O(1)