跳到主要内容

1049.最后一块石头的重量II

链接:1049.最后一块石头的重量II
难度:Medium
标签:数组、动态规划
简介:有一堆石头,用整数数组 stones 表示。其中 stones[i] 表示第 i 块石头的重量。最后,最多只会剩下一块 石头。返回此石头 最小的可能重量 。如果没有石头剩下,就返回 0。

题解 1 - typescript

  • 编辑时间:2021-06-08
  • 执行用时:92ms
  • 内存消耗:41.1MB
  • 编程语言:typescript
  • 解法介绍:sum-2*neg,neg 尽可能接近 sum。
function lastStoneWeightII(stones: number[]): number {
const sum = stones.reduce((total, cur) => total + cur, 0);
const len = stones.length;
const half = sum >> 1;
const dp = new Array(len + 1).fill(0).map(_ => new Array(half + 1).fill(false));
dp[0][0] = true;
for (let i = 0; i < len; i++) {
for (let j = 0; j <= half; j++) {
if (stones[i] > j) dp[i + 1][j] = dp[i][j];
else dp[i + 1][j] = dp[i][j] || dp[i][j - stones[i]];
}
}
for (let j = half; j >= 0; j--) if (dp[len][j]) return sum - 2 * j;
return 0;
}