@
also24 谢谢老哥
实现了一版
public class 端盘子移动问题 {
/**
* 思路
* 1.计算出 平均值,四舍五入。这样会尽量的平均
* 2.维护两个指针,分别记录小于平均值的指针,和大于平均值的指针
* 3.然后移动大小指针来均值计算。
*/
public static void main(String[] args) {
int[] array = {1, 2, 3, 4, 5};
double sum = 0;
for (int i = 0; i < array.length; i++) {
sum += array[i];
}
int avg = new BigDecimal(sum / array.length).setScale(0, BigDecimal.ROUND_HALF_UP).toBigInteger().intValue();
int small = 0;
int big = 0;
while (small < array.length && big < array.length) {
while (small < array.length && array[small] > avg) {
small++;
}
while (big < array.length && array[big] < avg) {
big++;
}
if (big >= array.length || small >= array.length) break;
//说明小于平均值的缺的盘子更多
if (Math.abs(array[small] - avg) > Math.abs(array[big] - avg)) {
int cha = Math.abs(array[big] - avg);
array[big] -= cha;
array[small] += cha;
big++;
} else {
int cha = Math.abs(array[small] - avg);
array[small] += cha;
array[big] -= cha;
small++;
}
}
}
}