给你一个长度为 n 的 环形 数组 balance,其中 balance[i] 是第 i 个人的净余额。
在一次移动中,一个人可以将 正好 1 个单位的余额转移给他的左邻居或右邻居。
返回使每个人都拥有 非负 余额所需的 最小 移动次数。如果无法实现,则返回 -1。
注意:输入保证初始时 至多 有一个下标具有 负 余额。
示例 1:
输入:balance = [5,1,-4]
输出:4
解释:
一种最优的移动序列如下:
i = 1 移动 1 个单位到 i = 2,结果 balance = [5, 0, -3]i = 0 移动 1 个单位到 i = 2,结果 balance = [4, 0, -2]i = 0 移动 1 个单位到 i = 2,结果 balance = [3, 0, -1]i = 0 移动 1 个单位到 i = 2,结果 balance = [2, 0, 0]因此,所需的最小移动次数是 4。
示例 2:
输入:balance = [1,2,-5,2]
输出:6
解释:
一种最优的移动序列如下:
i = 1 移动 1 个单位到 i = 2,结果 balance = [1, 1, -4, 2]i = 1 移动 1 个单位到 i = 2,结果 balance = [1, 0, -3, 2]i = 3 移动 1 个单位到 i = 2,结果 balance = [1, 0, -2, 1]i = 3 移动 1 个单位到 i = 2,结果 balance = [1, 0, -1, 0]i = 0 移动 1 个单位到 i = 1,结果 balance = [0, 1, -1, 0]i = 1 移动 1 个单位到 i = 2,结果 balance = [0, 0, 0, 0]因此,所需的最小移动次数是 6。
示例 3:
输入:balance = [-3,2]
输出:-1
解释:
对于 balance = [-3, 2],无法使所有余额都非负,所以答案是 -1。
提示:
1 <= n == balance.length <= 105-109 <= balance[i] <= 109balance 中初始至多有一个负值。