1049. 最後一塊石頭的重量 II
阿新 • • 發佈:2022-01-06
有一堆石頭,用整數陣列stones 表示。其中stones[i] 表示第 i 塊石頭的重量。
每一回合,從中選出任意兩塊石頭,然後將它們一起粉碎。假設石頭的重量分別為x 和y,且x <= y。那麼粉碎的可能結果如下:
如果x == y,那麼兩塊石頭都會被完全粉碎;
如果x != y,那麼重量為x的石頭將會完全粉碎,而重量為y的石頭新重量為y-x。
最後,最多隻會剩下一塊 石頭。返回此石頭 最小的可能重量 。如果沒有石頭剩下,就返回 0。
來源:力扣(LeetCode)
連結:https://leetcode-cn.com/problems/last-stone-weight-ii
著作權歸領釦網路所有。商業轉載請聯絡官方授權,非商業轉載請註明出處。
心之所向,素履以往 生如逆旅,一葦以航import java.util.Arrays; class Solution { public int lastStoneWeightII(int[] stones) { int sum = Arrays.stream(stones).sum(); // sum - 2 * neg = res; int limit = sum / 2; boolean[] dp = new boolean[limit + 1]; dp[0] = true; int neg = 0; for (int i = 0; i < stones.length; ++i) { for (int j = limit; j >= stones[i]; --j) { dp[j] |= dp[j - stones[i]]; if (dp[j]) { neg = Math.max(neg, j); } } } return sum - 2 * neg; } }