
代码 贪心:

- abs 绝对值函数
- max 最大值函数
- num 记录当前元素需要移动多少次,无论取出还是放入
- sum 记录目前位置需要移动多少次,取出和放入相互抵消,
- ans 维护最大值,最大值产生的情况有,sum 变化的途中,以及每一个元素自己想要移动的此时,取两者的最大值
func findMinMoves(machines []int) (ans int) {
tot := 0
for _, v := range machines {
tot += v
}
n := len(machines)
if tot%n > 0 {
return -1
}
avg := tot / n
sum := 0
for _, num := range machines {
num -= avg
sum += num
ans = max(ans, max(abs(sum), num))
}
return
}
func abs(x int) int {
if x < 0 {
return -x
}
return x
}
func max(a, b int) int {
if b > a {
return b
}
return a
}