diff --git a/problems/1049.最后一块石头的重量II.md b/problems/1049.最后一块石头的重量II.md index 3d256c3d..f3e7909c 100644 --- a/problems/1049.最后一块石头的重量II.md +++ b/problems/1049.最后一块石头的重量II.md @@ -277,26 +277,29 @@ var lastStoneWeightII = function (stones) { }; ``` -TypeScript: -```typescript +TypeScript版本 + +```ts function lastStoneWeightII(stones: number[]): number { - const sum: number = stones.reduce((pre, cur) => pre + cur); - const bagSize: number = Math.floor(sum / 2); - const weightArr: number[] = stones; - const valueArr: number[] = stones; - const goodsNum: number = weightArr.length; - const dp: number[] = new Array(bagSize + 1).fill(0); - for (let i = 0; i < goodsNum; i++) { - for (let j = bagSize; j >= weightArr[i]; j--) { - dp[j] = Math.max(dp[j], dp[j - weightArr[i]] + valueArr[i]); + const sum: number = stones.reduce((a: number, b:number): number => a + b); + const target: number = Math.floor(sum / 2); + const n: number = stones.length; + // dp[j]表示容量(总数和)为j的背包所能装下的数(下标[0, i]之间任意取)的总和(<= 容量)的最大值 + const dp: number[] = new Array(target + 1).fill(0); + for (let i: number = 0; i < n; i++ ) { + for (let j: number = target; j >= stones[i]; j--) { + dp[j] = Math.max(dp[j], dp[j - stones[i]] + stones[i]); } } - return sum - dp[bagSize] * 2; + return sum - dp[target] - dp[target]; }; ``` + + + -----------------------