首页 > 其他分享 >LeetCode 1049.最后一块石头的重量II

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

时间:2023-08-11 21:33:04浏览次数:42  
标签:stones 重量 int 1049 石头 II sum LeetCode dp

1.题目:

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

有一堆石头,用整数数组 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




class Solution {
    public int lastStoneWeightII(int[] stones) {
        int sum=0; 
        for(int s:stones){
            sum+=s;
        }
        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];
    }
}


这里跟分割等和子集几乎一样,就是最后返回的是碰撞之后剩余的重量


怎么想到是用动态规划呢?就是分析题目,是两块石头相撞,就会消耗对应的能量,然后就是把这个总的是有分成两堆重量相近的石头,然后用动态规划的背包问题来分石头,最后返回sum-2*dp[target];即可
















标签:stones,重量,int,1049,石头,II,sum,LeetCode,dp
From: https://blog.51cto.com/u_15806469/7052946

相关文章

  • Leetcode 977. 有序数组的平方(Squares of a sorted array)
    题目链接给你一个按非递减顺序排序的整数数组nums,返回每个数字的平方组成的新数组,要求也按非递减顺序排序.示例1:输入:nums=[-4,-1,0,3,10]输出:[0,1,9,16,100]解释:平方后,数组变为[16,1,0,9,100]排序后,数组变为[0,1,9,16,100]示例2:输入:nums=[-7,-3,2,3,11]输......
  • IIS8.5 Error Code 0x8007007e HTTP 错误 500.19的解决方法
    windowserver2012R2IIS8.5引用:https://www.52jbj.com/yunying/340443.htmlHTTP错误500.19-InternalServerError  无法访问请求的页面,因为该页的相关配置数据无效。    详细错误信息    模块DynamicCompressionModule    通知SendResponse    处......
  • Yuno loves sqrt technology III
    YunolovessqrttechnologyIII题意区间询问众数,强制在线。题解经典分块题,记一下。对于序列分块,记\(f_{i,j}\)代表第\(i\)个块到第\(j\)个块的众数出现次数。考虑询问的时候怎么做,我们只需要考虑散块。对于散块的元素\(a_i\)查找其在询问区间\([l,r]\)的个数,与......
  • Leetcode 27. 移除元素(Remove Element)
    题目链接给你一个数组nums和一个值val,你需要原地移除所有数值等于val的元素,并返回移除后数组的新长度.不要使用额外的数组空间,你必须仅使用O(1)额外空间并原地修改输入数组.元素的顺序可以改变.你不需要考虑数组中超出新长度后面的元素.说明:为什么返回数值是整数,但输......
  • Leetcode167. 两数之和 II - 输入有序数组(双指针)
    题目:两数之和II-输入有序数组(双指针)给你一个下标从1开始的整数数组numbers,该数组已按非递减顺序排列,请你从数组中找出满足相加之和等于目标数target的两个数。如果设这两个数分别是numbers[index1]和numbers[index2],则1<=index1<index2<=numbers.length......
  • LeetCode -- 827. 最大人工岛
      题目大意:给一个邻接矩阵,问改变一个点后,最大连通块多大对于这种连通块相关问题,一般的思路就是进行深搜和并查集,这里采用并查集维护连通块大小解法。首先先初始化并查集,并进行连通块的合并;再对图中的0进行枚举,找到最大的连通块即可。对(n*m)的二维点阵图常用技巧,二维转一......
  • LeetCode从算法到算命—1281.整数的各位积和之差(20230809)
    1281.整数的各位积和之差题目信息给你一个整数n,请你帮忙计算并返回该整数「各位数字之积」与「各位数字之和」的差。示例1:输入:n=234输出:15解释:各位数之积=2*3*4=24各位数之和=2+3+4=9结果=24-9=15示例2:输入:n=4421输出:21解释:各位......
  • 力扣---1289. 下降路径最小和 II
    给你一个 nxn 整数矩阵 grid ,请你返回 非零偏移下降路径 数字和的最小值。非零偏移下降路径 定义为:从 grid 数组中的每一行选择一个数字,且按顺序选出来的数字中,相邻数字不在原数组的同一列。 示例1:输入:grid=[[1,2,3],[4,5,6],[7,8,9]]输出:13解释:所有非零偏......
  • ASCII特殊码
    十进制十六进制控制字符转义字符说明Ctrl+下列字母00NUL\0Nullcharacter(空字符)@11SOHStartofHeader(标题开始)A22STXStartofText(正文开始)B33ETXEndofText(正文结束)C44EOTEndofTransmission(传输结束)D55E......
  • pg库报UnicodeDecodeError 'ascii' codec can't decode byte 0xe4 in position 0 ordi
    UnicodeDecodeError'ascii'codeccan'tdecodebyte0xe4inposition0ordinalnotinrange128其实就是加个:client_encoding配置#1、直接使用psycopg2def__init__(self,dict_flag=False):self.conn=psycopg2.connect(host=PostgresParams().get_host()......