贪心 & 排序
解法:贪心 & 排序
每次应该选择当前幸福值最高的孩子。由于每个孩子在没被选中时,幸福值都会下降相同的量,所以幸福值的相对大小关系不会改变。
因此将孩子按幸福值从大到小排序,依次选择孩子即可。复杂度 $\mathcal{O}(n\log n)$。
参考代码(c++)
###c++
class Solution {
public:
long long maximumHappinessSum(vector<int>& happiness, int K) {
int n = happiness.size();
// 将孩子按幸福值排序
sort(happiness.begin(), happiness.end());
long long ans = 0;
// 按幸福值从大到小选择孩子
for (int i = n - 1; i >= n - K; i--) ans += max(0, happiness[i] - (n - 1 - i));
return ans;
}
};