【灵神题单·贪心】2279. 装满石头的背包的最大数量 | 排序贪心 | Java

🔗 题目链接:2279. 装满石头的背包的最大数量

📚 所属题单:灵茶山艾府 · 贪心算法题单 --- §1.1 从最小/最大开始贪心

🏷️ 难度:Medium | 难度分:1249

🔖 标签:贪心、数组、排序

📖 题目描述

现有 n 个背包。给你两个数组 capacityrocks。第 i 个背包最大可以装 capacity[i] 块石头,当前已经装了 rocks[i] 块石头。另给你 additionalRocks 块额外的石头,可以往任意背包中放。

返回放置后装满石头的背包的最大数量

示例 1

```

输入:capacity = [2,3,4,5], rocks = [1,2,4,4], additionalRocks = 2

输出:3

解释:1 块石头放入背包 0,1 块石头放入背包 1。

背包 0、1、2 都装满了。总计 3 个背包装满。

```

示例 2

```

输入:capacity = [10,2,2], rocks = [2,2,0], additionalRocks = 100

输出:3

解释:8 块石头放入背包 0,2 块石头放入背包 2。全部装满。

```

提示

  • 1 <= n <= 5 * 10^4
  • 1 <= capacity[i] <= 10^9
  • 0 <= rocks[i] <= capacity[i]
  • 1 <= additionalRocks <= 10^9

💡 思路分析

每个背包还差 gap[i] = capacity[i] - rocks[i] 块石头才能装满。

要装满尽可能多的背包,应该优先填 gap 最小的------花最少的石头装满一个包,这样手里的额外石头就能多装几个。

就像你有一笔固定预算给空调房间补温,肯定先补差距最小的房间,这样能"达标"的房间最多 🏠

算法步骤

  1. 算差值gap[i] = capacity[i] - rocks[i]
  2. 排序:gap 从小到大排
  3. 贪心填充:从 gap 最小的开始,依次扣减 additionalRocks,直到石头不够

✅ 代码实现(Java)

```java

class Solution {

public int maximumBags(int[] capacity, int[] rocks, int additionalRocks) {

int n = capacity.length;

int[] gap = new int[n];

for (int i = 0; i < n; i++) {

gap[i] = capacity[i] - rocks[i];

}

Arrays.sort(gap);

int count = 0;

for (int i = 0; i < n; i++) {

if (gap[i] == 0) {

count++;

} else if (additionalRocks >= gap[i]) {

additionalRocks -= gap[i];

count++;

} else {

break;

}

}

return count;

}

}

```

📊 复杂度分析

复杂度 说明
⏱️ 时间 O(n log n) 排序
💾 空间 O(n) gap 数组

🔗 参考

🎯 和前两题一脉相承------排序后从最小/最大开始贪心。这次是"差值最小的优先填",核心逻辑三行代码就搞定。

相关推荐
云烟成雨TD6 小时前
Spring AI Alibaba 1.x 系列【22】Agent 并行工具执行与超时 / 协作式取消实战
java·人工智能·spring
雾岛听蓝6 小时前
Qt操作指南:窗口组成与菜单栏
开发语言·经验分享·笔记·qt
段小二6 小时前
服务一重启全丢了——Spring AI Alibaba Agent 三层持久化完整方案
java·后端
段小二6 小时前
Agent 自动把机票改错了,推理完全正确——这才是真正的风险
java·后端
zopple6 小时前
Laravel vs ThinkPHP:PHP框架终极对决
开发语言·php·laravel
itjinyin7 小时前
ShardingSphere-jdbc 5.5.0 + spring boot 基础配置 - 实战篇
java·spring boot·后端
松☆7 小时前
C++ 算法竞赛题解:P13569 [CCPC 2024 重庆站] osu!mania —— 浮点数精度陷阱与 `eps` 的深度解析
开发语言·c++·算法
耿雨飞7 小时前
Python 后端开发技术博客专栏 | 第 06 篇 描述符与属性管理 -- 理解 Python 属性访问的底层机制
开发语言·python
丶小鱼丶7 小时前
Java虚拟机【JVM】
java·jvm
耿雨飞7 小时前
Python 后端开发技术博客专栏 | 第 08 篇 上下文管理器与类型系统 -- 资源管理与代码健壮性
开发语言·python