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 weightx
is totally destroyed, and the stone of weighty
has 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 <= 30
1 <= 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 国际许可协议