В ряд стоят n стиральных машин, в i-й лежит machines[i] платьев. За один
ход можно выбрать любое число машин (от 1 до n) и в каждой выбранной
одновременно передать одно платье соседней слева или справа машине (для каждой
выбранной — в одну из её сторон).
Нужно сделать так, чтобы во всех машинах стало поровну платьев, за минимальное
число ходов. Если уравнять нельзя — вернуть -1.
// FindMinMoves возвращает минимальное число ходов для уравнивания или -1.
func FindMinMoves(machines []int) int
Примеры
[1,0,5] → 3
[0,3,0] → 2
[0,2,0] → -1 // 2 платья на 3 машины не делятся поровну
[1,1,1,1] → 0
Ограничения
0 ≤ n, 0 ≤ machines[i].
- Срез менять нельзя.
- Ожидается O(n) по времени и O(1) дополнительной памяти.
Устно: почему ответ — это не просто «сколько всего платьев надо
переместить»? Что ограничивает скорость: пропускная способность одного стыка
между машинами или объём, который должна «прокачать» одна машина?
Разбор и эталонное решение — после своей попытки: на собеседовании подсказок не будет.
Сначала попробуй сам — подсказки не дают готовый ответ.