当前位置: 首页 > news >正文

贪心:一道简单题的细节问题

题目链接:2279. 装满石头的背包的最大数量 - 力扣(LeetCode)

思路:计算出每个背包剩余的容量,再贪心即可。

反面教材:

错在第19行和第20行。我们的逻辑是:剩余的额外石头的数量left减去填充进去的石头数量。但这里我们先让capacity[i]变成了0,那么left再自减capacity[i]就不起作用了。

正确代码:

int maximumBags(vector<int>& capacity, vector<int>& rocks, int additionalRocks)
{
    int left = additionalRocks;
    for (int i = 0; i < capacity.size(); i++)
    {
        capacity[i] -= rocks[i];//得到每个背包剩余的容量
    }
    int ans = 0;
    sort(capacity.begin(), capacity.end());
    for (int i = 0; i < capacity.size(); i++)
    {
        if (left == 0 || left < capacity[i]) break;
        //如果没有额外的石头,或者额外的石头不足以填满接下来的背包,那么break(因为已排序)
        if (capacity[i] == 0) ans++;//可能有些剩余的容量已经是0了
        else if (left >= capacity[i])
        {
            left -= capacity[i];
            capacity[i] = 0;
            ans++;//处理过的,直接计入答案
        }
    }
    return ans;
}

这里我们不仅处理清楚了逻辑,还进行了优化。实际上,没有必要再遍历一次capacity数组找其中有多少个0了,因为答案=我们填充过的背包数量+原本就没有剩余容量的背包数量。因此,我们在遍历的过程中,直接处理ans即可。

相关文章:

  • 批量给 PPT 文档添加或删除保护,批量设置打开密码和只读密码
  • Elasticsearch 文档
  • 向量化地图重建
  • vue java 实现大地图切片上传
  • 高速开源镜像站网址列表2503
  • c++11 | 细说智能指针
  • Linux驱动开发--IIC子系统
  • windows与linux开发板之间设置nfs共享文件
  • 透析React Fiber架构
  • 【Cadence速成】半小时速成Cadence制图与PCB绘制(OrCAD+Allegro)
  • struts2框架漏洞攻略
  • Spring Boot3 配置文件
  • maven如何区分多环境配置
  • 尝试在软考62天前开始成为软件设计师-信息系统安全
  • 模糊数学 | 模型 / 集合 / 关系 / 矩阵
  • value-key 的作用
  • C语言为什么不考虑对齐规则?
  • Go常见问题与回答(上)
  • 100天精通Python(爬虫篇)——第122天:基于selenium接管已启动的浏览器(反反爬策略)
  • 机器学习——神经网络、感知机
  • Manus向全球用户开放注册
  • 走进“双遗之城”,领略文武风采:沧州何以成文旅新贵
  • 某博主遭勒索后自杀系自导自演,成都警方立案调查
  • 来伊份:已下架涉事批次蜜枣粽产品,消费者可获额外补偿,取得实物后进一步分析
  • 上海工匠学院首届学历班56人毕业,新一届拟招生200人
  • 普京提议恢复直接谈判,泽连斯基:望俄明日停火,乌愿谈判