【灵神题单·贪心】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 intn;

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

gapi = capacityi - rocksi;

}

Arrays.sort(gap);

int count = 0;

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

if (gapi == 0) {

count++;

} else if (additionalRocks >= gapi) {

additionalRocks -= gapi;

count++;

} else {

break;

}

}

return count;

}

}

```

📊 复杂度分析

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

🔗 参考

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

相关推荐
小熊美家熊猫系统16 分钟前
电子合同技术实现与合规实践
java·开发语言·分布式
云烟成雨TD16 分钟前
Agent Scope Java 2.x 系列【3】从零构建 ReActAgent
java·人工智能·agent
ytttr87319 分钟前
C# 定时数据库备份工具
开发语言·数据库·c#
一只叫煤球的猫26 分钟前
ThreadForge 源码解读二:一个 Task 从 submit 到完成,内部到底发生了什么?
java·后端·面试
skywalk81631 小时前
言知项目后续方向建议
开发语言·学习·编程
阿狸猿1 小时前
论微服务架构及其应用
java·微服务·架构
拉勾科研工作室1 小时前
区块链工程毕业论文题目【249个】
开发语言·javascript
程序员黑豆1 小时前
Java中的字符串【AI全栈开发】
java
namexingyun2 小时前
开源前端生态如何成为 AI UI 生成的“燃料“:shadcn/ui、Tailwind CSS、Storybook 技术价值全解剖
java·前端·人工智能·python·ui·开源·ai编程
z落落2 小时前
C#WinForm控件实战:Panel与单选框动态创建
开发语言·c#