1. 程式人生 > 其它 >1049. 最後一塊石頭的重量 II

1049. 最後一塊石頭的重量 II

有一堆石頭,用整數陣列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;
    }
}
心之所向,素履以往 生如逆旅,一葦以航