leetcode-1049-Last Stone Weight II
问题
We have a collection of rocks, each rock has a positive integer weight.
Each turn, we choose any two rocks and smash them together. Suppose the stones have weights x and y with x <= y. The result of this smash is:
- If
x == y, both stones are totally destroyed; - If
x != y, the stone of weightxis totally destroyed, and the stone of weightyhas new weighty-x.
At the end, there is at most 1 stone left. Return the smallest possible weight of this stone (the weight is 0 if there are no stones left.)
Example 1:
1 | Input: [2,7,4,1,8,1] |
Note:
1 <= stones.length <= 301 <= stones[i] <= 100
分析
该问题可以转化为“给定一堆石头,分成两个部分,要求两个部分之差最小,求这个最小值。”,那么我们可以使用背包模型来解这个问题。假设所有石头的总重量是 sum,那么现在有一个容量为 halfSum = sum/2 的背包,每个是石块的重量与其体积相等,现在向背包中装石头,问最多能容纳的重量是多少?假设为 x ,那么这道题的答案就是 sum-2*x。
https://github.com/wisdompeak/LeetCode/tree/master/Dynamic_Programming/1049.Last-Stone-Weight-II
代码
1 | class Solution { |
Author: Hatton.Liu
Link: http://hattonl.github.io/2020/03/28/leetcode-1049/
License: 知识共享署名-非商业性使用 4.0 国际许可协议