【5.31 代随_43day】 最后一块石头的重量 II、目标和、一和零
最后一块石头的重量 II、目标和、一和零
- 最后一块石头的重量 II
- 1.方法
- 图解步骤![在这里插入图片描述](https://img-blog.csdnimg.cn/d2266317bc43491fb261f6372c2e0c9d.jpeg)
- 代码
- 目标和
- 1.方法
- 图解步骤
- 代码
- 一和零
- 图解步骤
- 代码
最后一块石头的重量 II
力扣连接:1049. 最后一块石头的重量 II(中等)
1.方法
和 416. 分割等和子集 (opens new window) 非常像了
图解步骤![](/assets/blank.gif)
代码
class Solution {public int lastStoneWeightII(int[] stones) {int sum = Arrays.stream(stones).sum();int target = sum/2;int[] dp = new int[target+1];int n = stones.length;for(int i=0;i<n;i++){for(int j=target; j>=stones[i]; j--){dp[j] = Math.max(dp[j], dp[j-stones[i]]+stones[i]);}}int other = sum-dp[target];//另一堆石头return other-dp[target];}
}
目标和
力扣连接:494. 目标和(中等)
1.方法
确定dp数组以及下标的含义
dp[j] 表示:填满j(包括j)这么大容积的包,有dp[j]种方法确定递推公式
只要搞到nums[i],凑成dp[j]就有dp[j - nums[i]] 种方法。
例如:dp[j],j 为5,
已经有一个1(nums[i]) 的话,有 dp[4]种方法 凑成 容量为5的背包。
已经有一个2(nums[i]) 的话,有 dp[3]种方法 凑成 容量为5的背包。
已经有一个3(nums[i]) 的话,有 dp[2]中方法 凑成 容量为5的背包
已经有一个4(nums[i]) 的话,有 dp[1]中方法 凑成 容量为5的背包
已经有一个5 (nums[i])的话,有 dp[0]中方法 凑成 容量为5的背包
那么凑整dp[5]有多少方法呢,也就是把 所有的 dp[j - nums[i]] 累加起来。
图解步骤
关键点:
- if (abs(target) > sum) return 0; // 此时没有方案
- f ((target + sum) % 2 != 0) return 0; // 此时没有方案
代码
class Solution {public int findTargetSumWays(int[] nums, int target) {int sum = Arrays.stream(nums).sum();//target过大的情况if(target<0 && Math.abs(target)>sum) return 0;//无法整除的情况if((target+sum)%2!=0) return 0;int left = (target+sum)/2;//背包容量为j时,有dp[j]种方法int[] dp = new int[left+1];//初始化dp[0] = 1;for(int i=0;i<nums.length;i++){for(int j=left;j>=nums[i];j--){dp[j] += dp[j-nums[i]];}}return dp[left];}
}
一和零
力扣连接:474. 一和零(中等)
- 确定dp数组(dp table)以及下标的含义
dp[i][j]:最多有i个0和j个1的strs的最大子集的大小为dp[i][j]。 - 确定递推公式
dp[i][j] 可以由前一个strs里的字符串推导出来,strs里的字符串有zeroNum个0,oneNum个1。
dp[i][j] 就可以是 dp[i - zeroNum][j - oneNum] + 1。
然后我们在遍历的过程中,取dp[i][j]的最大值。
所以递推公式:dp[i][j] = max(dp[i][j], dp[i - zeroNum][j - oneNum] + 1);
图解步骤
代码
class Solution {public int findMaxForm(String[] strs, int m, int n) {int[][] dp = new int[m+1][n+1];for(String str: strs){int zeroNum = 0;int oneNum = 0;for(char ch: str.toCharArray()){if(ch=='1'){oneNum++;}else{zeroNum++;}}for(int i=m;i>=zeroNum;i--){for(int j=n;j>=oneNum;j--){dp[i][j] = Math.max(dp[i][j], dp[i-zeroNum][j-oneNum]+1);}}}return dp[m][n];}
}
【5.31 代随_43day】 最后一块石头的重量 II、目标和、一和零相关推荐
- LeetCode-动态规划背包题-1049. 最后一块石头的重量 II
描述 1049. 最后一块石头的重量 II 有一堆石头,用整数数组 stones 表示.其中 stones[i] 表示第 i 块石头的重量. 每一回合,从中选出任意两块石头,然后将它们一起粉碎.假设石 ...
- 最后一块石头的重量 II
最后一块石头的重量 II 有一堆石头,用整数数组 stones 表示.其中 stones[i] 表示第 i 块石头的重量. 每一回合,从中选出任意两块石头,然后将它们一起粉碎.假设石头的重量分别为 x ...
- day36|1049. 最后一块石头的重量 II、494. 目标和、474.一和零
1049. 最后一块石头的重量 II 有一堆石头,用整数数组 stones 表示.其中 stones[i] 表示第 i 块石头的重量. 每一回合,从中选出任意两块石头,然后将它们一起粉碎.假设石头的重 ...
- leetcode1049. 最后一块石头的重量 II(java)
最后一块石头的重量 II leetcode1049. 最后一块石头的重量 II 题目描述 解题思路 解法一 暴力递归 解法二 动态规划 动态规划专题 leetcode1049. 最后一块石头的重量 I ...
- LeetCode 1049. 最后一块石头的重量 II
1049. 最后一块石头的重量 II 无论按照何种顺序粉碎石头,最后一块石头的重量总是可以表示成 可以这样理解,将所有的石头分为两堆,ki=1的石头是一堆,ki=-1的石头是另一堆,我们的目标就是求上 ...
- LeetCode149、最后一块石头的重量 II
1049最后一块石头的重量 II 文章目录 1049最后一块石头的重量 II 题目链接 题目描述 解题思路 代码实现 总结 题目链接 https://leetcode-cn.com/problems/ ...
- day43|● 1049. 最后一块石头的重量 II ● 494. 目标和 ● 474.一和零
1049. 最后一块石头的重量 II 1.代码 class Solution { public:int lastStoneWeightII(vector<int>& stones) ...
- 153、【动态规划】leetcode ——1049. 最后一块石头的重量 II:滚动数组(C++版本)
题目描述 原题链接:1049. 最后一块石头的重量 II 解题思路 本题要找的是最小重量,我们可以将石头划分成两个集合,当两个集合的重量越接近时,相减后,可达到的装量就会是最小,此时本题的思路其实就类 ...
- 【43天|1049. 最后一块石头的重量 II ● 494. 目标和 ● 474.一和零 】
1049. 最后一块石头的重量 II dp[j] 表示j容量的背包可以背下石头的最大重量. class Solution {public:int lastStoneWeightII(vector< ...
最新文章
- 常见医疗扫描图像处理步骤
- Google CEO Sundar Pichai :“谷歌最大的威胁就是自身的成功”
- spotlight监控linux性能
- bread是可数还是不可数_雅思官方语法教程之——这个名词到底可不可数?
- 国家开放大学2021春1050金融理论前沿课题题目
- 构建之法——需求分析+项目经理+典型用户和场景
- SQL server中如何使用return,break和continue
- @Responsebody与@RequestBody
- Windows中cmd命令启动Oracle数据
- 程序员常识--OJ系统及ACM测试题库大全
- (二十二)【模电】(波形的发生与信号的转换)电压比较器
- 清华EMBA课程系列思考之十七(1) -- 新企业的孵化与创业投资
- 单片机c语言出租车计时程序,基于单片机的出租车计费(c语言
- win10开机的微软服务器,部分 Win10 Edge 浏览器开机自动启动,微软确认是 bug
- linux排行榜网站,DistroWatch网站搞的Linux国际排名为它赢得了不少的流量
- PS练习3——渐变色
- 第一次独立使用无人船记录日志—第1天
- 用迭代器指针改变map容器的值
- asp.net mvc 5 identity 2.0 注册时密码强度验证
- 买了个VR眼镜,体验一下元宇宙
热门文章
- 远离敏捷状态的 Scrum 框架
- Ubuntu18.04+Ros Melodic安装Moveit
- 高斯投影坐标计算例题_高斯投影坐标计算程序
- Gprinter Android SDK V2.0 使用说明
- 数据压缩作业:png图像格式分析
- 使用VirtualBox一步一步安装Ubuntu 22.04
- 计算机要通过手机传播,如何将手机与电脑连接起来,从而把手机里的照片和视频传到电脑上?...
- 迅雷+小米=现象级区块链应用?
- 输出100以内的奇数的和
- 使用SQL生成非均匀随机数