思路:
我们需要知道的一点是,结果的非空袋子中的豆子数量,一定是原先某一个袋子的豆子数量;知道这个前提这个题将变得比较简单了
- 数组进行一个从小到大排序;
- 遍历数组;
2.1. 假设最后非空袋子的豆子数量是当前袋子的豆子数量(beans[ i ]),
2.2. 非空袋子的豆子数量总和就是当前袋子的豆子数量乘以大于或等于当前袋子的豆子数量的袋数(由于我们已经进行了排序,因此袋数就是数组长度减去当前下标;beans[ i ]*(L-i)),
2.3. 总豆子数量减掉最后非空袋子的豆子数量总和(最后剩余的总豆子数),就得到了我们拿走的豆子数量,
2.4. 比较结果值,取最小的值;
/**
* @param {number[]} beans
* @return {number}
*/
var minimumRemoval = function(beans) {
beans.sort((a,b)=>a-b);
let acount = beans.reduce((accumulator,curVal)=>accumulator+curVal)
let sum =0 ,L=beans.length;
let min= 99999999999;
for(let i=0; i<L;i++){
sum = acount - beans[i]*(L-i)
if(sum<min){
min=sum;
}
}
return min;
};