【排序+枚举】【数组】【2024-01-18】
思路
我们将数组 beans
从小到大排序,枚举排序后的魔法豆数目 v
作为最终非空袋子中魔法豆的数目,将小于 v
的魔法豆全部清空,大于 v
的魔法豆减少到 v
,这样所有非空袋子中的魔法豆数目相等。
在枚举过程中记录最多能剩下的魔法豆数量,根据:拿出的魔法豆数量+剩余的魔法豆数量=初始的魔法豆数量之和 得到 最少拿出的魔法豆数量 = 初始的魔法豆数量之和 - 最多能剩下的魔法豆数量。
算法
class Solution {
public:
long long minimumRemoval(vector<int> &beans) {
ranges::sort(beans);
long long sum = 0, mx = 0;
int n = beans.size();
for (int i = 0; i < n; i++) {
sum += beans[i];
mx = max(mx, (long long) (n - i) * beans[i]);
}
return sum - mx;
}
};
复杂度分析
时间复杂度:
O
(
n
l
o
g
n
)
O(nlogn)
O(nlogn),
n
n
n 为数组 beans
的长度。
空间复杂度: O ( n l o g n ) O(nlogn) O(nlogn),排序占用的额外空间。
如果您发现文章有任何错误或者对文章有任何疑问,欢迎私信博主或者在评论区指出 💬💬💬。
如果大家有更优的时间、空间复杂度的方法,欢迎评论区交流。
最后,感谢您的阅读,如果有所收获的话可以给我点一个 👍 哦。