leetcode 3075(排序+贪心)

3075: 幸福值最大化的选择方案

为什么一定要按 "从大到小" 的顺序选?

  • 如果值都很大,大家减完 1 都还是正数,顺序不影响;
  • 反之,因为小的会减为 0,晚点选它没损失;但大的如果晚点选,就会被白白减去 1。

本质上,由于存在 max(0,...) 这个 "截断" 机制,越小的值越容易触发 "保底 0"。为了保护总和,我们应该 优先榨取大值的剩余价值,让那些迟早要变成 0的小值去承担减量。

每个孩子被选中时,其贡献是 max(0, 初始值 - 已经过去的轮数);

只能选k个,优先选择较大的。

复制代码
class Solution {
public:
    long long maximumHappinessSum(vector<int>& happiness, int k) {
        long long ans=0;
        int m=0;
        sort(happiness.begin(),happiness.end());
        for(int i=happiness.size()-1;i>=0;i--){
            ans+=happiness[i];
            m++;
            if(m==k) break;
            if(i-1>=0 && happiness[i-1]>0) happiness[i-1]=max(0,happiness[i-1]-m);
        }
        return ans;
    }
};
相关推荐
小宋加油啊4 小时前
机械臂抓取物体 PVN3D算法调研学习
学习·算法·3d
lqqjuly4 小时前
前沿算法深度解析(一)
算法
小欣加油4 小时前
leetcode1926 迷宫中离入口最近的出口
数据结构·c++·算法·leetcode·职场和发展
happymaker06267 小时前
LeetCodeHot100——42.接雨水
算法
阿正的梦工坊7 小时前
【Rust】07-错误处理:Option、Result 与 ? 运算符
开发语言·算法·rust
烬羽7 小时前
从零理解树与二叉树:用 JS 带你手撕遍历和递归
javascript·数据结构
YHL7 小时前
🚀从零理解树与二叉树 —— 概念、实现与遍历
前端·javascript·数据结构
JieE2128 小时前
JS 到底有多少种数据类型?从ECMA规范到内存本质,一文彻底搞懂
javascript·数据结构·面试
努力努力再努力wz8 小时前
【内存管理与高并发内存池系列】从 mmap 到 malloc:文件映射、匿名映射与 glibc 内存分配机制详解
linux·c语言·数据结构·数据库·c++·qt·链表