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

导读:本篇文章讲解 1049. 最后一块石头的重量 II,希望对大家有帮助,欢迎收藏,转发!站点地址:www.bmabk.com

1049. 最后一块石头的重量 IIicon-default.png?t=M666https://leetcode.cn/problems/last-stone-weight-ii/1049. 最后一块石头的重量 II

难度中等516

有一堆石头,用整数数组 stones 表示。其中 stones[i] 表示第 i 块石头的重量。

每一回合,从中选出任意两块石头,然后将它们一起粉碎。假设石头的重量分别为 x 和 y,且 x <= y。那么粉碎的可能结果如下:

  • 如果 x == y,那么两块石头都会被完全粉碎;
  • 如果 x != y,那么重量为 x 的石头将会完全粉碎,而重量为 y 的石头新重量为 y-x

最后,最多只会剩下一块 石头。返回此石头 最小的可能重量 。如果没有石头剩下,就返回 0

示例 1:

输入:stones = [2,7,4,1,8,1]
输出:1
解释:
组合 2 和 4,得到 2,所以数组转化为 [2,7,1,8,1],
组合 7 和 8,得到 1,所以数组转化为 [2,1,1,1],
组合 2 和 1,得到 1,所以数组转化为 [1,1,1],
组合 1 和 1,得到 0,所以数组转化为 [1],这就是最优值。

示例 2:

输入:stones = [31,26,33,21,40]
输出:5

提示:

  • 1 <= stones.length <= 30
  • 1 <= stones[i] <= 100

通过次数83,734提交次数123,072

class Solution {
    public int lastStoneWeightII(int[] stones) {

        int sum = 0;
        for(int i=0;i<stones.length;i++)
            sum+=stones[i];

        int target = sum/2;
        int[] dp = new int[target+1];
        for(int i=0;i<stones.length;i++)
        {
            for(int j=target;j>=stones[i];j--)
            {
                dp[j] = Math.max(dp[j],dp[j-stones[i]]+stones[i]);
            }
        }
        return sum-2*dp[target];
    }
}

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

 

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 举报,一经查实,本站将立刻删除。

文章由极客之音整理,本文链接:https://www.bmabk.com/index.php/post/68995.html

(0)
小半的头像小半

相关推荐

极客之音——专业性很强的中文编程技术网站,欢迎收藏到浏览器,订阅我们!