- 只有两种拿法,要么全拿光,剩下的要取到和最少魔法豆的袋子的数目相等,显然关键在于每个袋子的最少豆子数量是多少(少于这个数量的袋子是全拿出的)
- 想到了从小到大排序先把最少豆子的袋子认为是基线(最少数量),计算要拿几颗,然后再以下一个排好序的袋子为基线,再算要拿几颗,遍历完数组就可以得到答案了
class Solution:def minimumRemoval(self, beans: List[int]) -> int:beans.sort()n = len(beans)ans = [0] * nans[0] = sum(beans) - n * beans[0]for i in range(1, n):ans[i] = ans[i - 1] + beans[i - 1] - (beans[i] - beans[i - 1]) * (n - i)return min(ans)