超级洗衣机——贪心

100 阅读1分钟

image.png

代码 贪心:

image.png

  1. abs 绝对值函数
  2. max 最大值函数
  3. num 记录当前元素需要移动多少次,无论取出还是放入
  4. sum 记录目前位置需要移动多少次,取出和放入相互抵消,
  5. 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
}