题干
数据范围
这里我们发现数据量很容易超过int的最大表示范围(大约是 2 * 10 ^ 9),所以使用long这个数据类型
思路
借鉴了lc的灵神
将取出最少问题转化为留下最多的问题
先排序(升序),随后从前往后找,
sum取得全部豆子的数量
maxx递归判断以多少豆子为最终保留的数量时,留下的豆子数最多,因为已经遍历过了,所以此时可以确定比当前位置i还多的位置有len - i,这也是排序的根本目的所在
代码
class Solution {
public long minimumRemoval(int[] beans) {
Arrays.sort(beans);
long sum = 0;
long maxx = -1;
int len = beans.length;
for(int i = 0;i < len;++i){
sum += beans[i];
maxx = Math.max(maxx, (long)(len - i) * beans[i]);
}
return sum - maxx;
}
}