【LeetCode】装满石头的背包的最大数量 Java 题解
题目描述
现有编号从 0 到 n - 1 的 n 个背包。给你两个下标从 0 开始的整数数组 capacity 和 rocks 。第 i 个背包最大可以装 capacity[i] 块石头,当前已经装了 rocks[i] 块石头。另给你一个整数 additionalRocks ,表示你可以放置的额外石头数量,石头可以往 任意 背包中放置。
请你将额外的石头放入一些背包中,并返回放置后装满石头的背包的 最大 数量。
复制代码
思路分析
今天的算法题目是背包问题,题目以数组的形式展现。题目比较长,给出了 capacity 和 rocks 两个数组,capacity 代表存储容量, rocks 代表当前已经有的数量,利用这两个数组,capacity[i] 减去 rocks[i], 可以求出 i 还可以放多少石头。
additionalRocks 代表还可以放的石头的总数,我们把 additionalRocks 放完,就可以求出 背包 的最大数量。
在求出 背包 的最大数量的时候,我们可以使用贪心的思想,也就是先放满差值数量小的背包。使用贪心,需要先对差值数组排序,然后先放满小的,在放满大的。具体实现代码如下,请参考。
通过代码
复制代码
总结
上述算法的时间复杂度是 O(n * log n ), 空间复杂度是 O(n)
坚持算法每日一题,加油!
版权声明: 本文为 InfoQ 作者【Albert】的原创文章。
原文链接:【http://xie.infoq.cn/article/f33c8fe793a51c9279169af08】。文章转载请联系作者。
评论