普通视图

发现新文章,点击刷新页面。
昨天 — 2025年12月25日首页

贪心 & 排序

作者 tsreaper
2024年3月10日 12:08

解法:贪心 & 排序

每次应该选择当前幸福值最高的孩子。由于每个孩子在没被选中时,幸福值都会下降相同的量,所以幸福值的相对大小关系不会改变。

因此将孩子按幸福值从大到小排序,依次选择孩子即可。复杂度 $\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;
    }
};
❌
❌