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

🔗 参考

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

相关推荐
无限的鲜花10 小时前
反射(原创推荐)
java·开发语言
IT二叔10 小时前
Java项目部署-03-teamcity-cicd-docker镜像流水线方式部署
java·ci/cd·持续部署
yongche_shi10 小时前
ragas官方文档中文版(五十)
开发语言·python·ai·ragas·如何评估和改进 rag 应用
一路向北he10 小时前
字节钢铁军团--“提供情境,而非控制”
java·开发语言·前端
超级数据查看器11 小时前
超级数据查看器 v10.0 发布
java·大数据·数据库·sqlite·安卓
AI行业学习12 小时前
Notepad++ 官方下载 + 完整安装 + 全套优化配置(2026最新)
开发语言·人工智能·python·前端框架·html·notepad++
折哥的程序人生 · 物流技术专研12 小时前
《Java 100 天进阶之路》第50篇:阻塞队列与并发容器(2026版)
java·面试题·java进阶·blockingqueue·并发容器·集合源码·java100天进阶
ai_coder_ai12 小时前
编写自动化脚本,在自己后端服务中使用Open Api进行设备相关操作
java·运维·自动化
大圣编程13 小时前
Python中continue语句的用法是什么?
开发语言·前端·python
硕风和炜13 小时前
【LeetCode: 2492. 两个城市间路径的最小分数 + DFS】
java·算法·leetcode·深度优先·dfs·bfs·并查集