当前位置: 首页 > news >正文

【代码随想录day36】【C++复健】1049. 最后一块石头的重量 II ; 494. 目标和 ;474.一和零

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

纠结了一下是要定义bagsize为sum/2还是sum/2+1,但在最后return的时候发现,如果设置成sum/2+1的话,没办法保证2*dp[bagsize]和sum之间哪个更大,所以选择了向下取整。

class Solution {
public:int lastStoneWeightII(vector<int>& stones) {int n = stones.size();int sum = 0;for(int i=0; i<stones.size(); i++){sum += stones[i];}int bagsize = sum/2;vector<int> dp(bagsize+1);for(int i=0; i<n; i++){for(int j=bagsize; j>=stones[i]; j--){dp[j] = max(dp[j], dp[j-stones[i]]+stones[i]);}}return sum - 2*dp[bagsize];}
};

494. 目标和

没被递推公式难住,但是却被初始化难住了,因为在我看来,dp[0]是0是1好像都能说得通,但是只有当dp[0]等于1的时候才能引导出正确的后续结果,那就按1来吧。

除此之外还忽略了对于特殊情况的处理逻辑,一个是目标小于sum的情况不行,还有就是当target+sum为奇数,这个时候无法用整数的bagsize算出来这个target+sum,此时也是无解的。但我没加这个处理条件,所以导致了错误的结果。

导致这问题的主要原因还是没搞清楚底下的for循环能处理什么,不能处理什么。

class Solution {
public:int findTargetSumWays(vector<int>& nums, int target) {int sum = 0;int n = nums.size();for(int i=0; i<n; i++){sum += nums[i];}if (abs(target) > sum) return 0; // 此时没有方案if ((target + sum) % 2 == 1) return 0; // 此时没有方案int bagsize = (sum + target)/2;vector<int> dp(bagsize+1);dp[0] = 1;for(int i=0; i<n; i++){for(int j=bagsize; j>=nums[i]; j--){dp[j] += dp[j-nums[i]];}}return dp[bagsize];}
};

474.一和零

一开始写这个的时候,递推公式出现了问题,还以为是这样:

dp[j][k] = dp[j-count[i][0]][k-count[i][1]] + 1;

但实际上并不是,我们还要和原始的dp[j][k]之间去做一个大小的比较,因为其实现在,动态数组是一个二维的数组,我们会通过循环不断遍历这个二维数组,就像之前遍历一维数组那样。而我就是对整个遍历过程还是没有理解的很深刻,才会出现这样的问题。

class Solution {
public:int findMaxForm(vector<string>& strs, int m, int n) {int len = strs.size();vector<vector<int>> count(len, vector<int>(2));for(int i=0; i<strs.size(); i++){for(int j = 0; j< strs[i].size(); j++){if(strs[i][j] == '0'){count[i][0] += 1;}else if(strs[i][j] == '1'){count[i][1] += 1;}}}vector<vector<int>> dp(m+1, vector<int>(n+1));for(int i=0; i<count.size(); i++){for(int j=m; j>=count[i][0]; j--){for(int k=n; k>=count[i][1]; k--){dp[j][k] = max(dp[j][k], dp[j-count[i][0]][k-count[i][1]] + 1);}}}return dp[m][n];}
};


http://www.mrgr.cn/news/77717.html

相关文章:

  • (三)ROS通信编程——话题通信
  • Kafka 会丢消息吗?
  • git 转移文件夹
  • npm-npm install时rollbackFailedOptional: verb npm-session ce210dc17dd264aa报错
  • 【数据库系统概论】数据库恢复技术
  • uniapp 的uni.getRecorderManager() 录音功能小记
  • 大语言模型---LoRA简介;LoRA的优势;LoRA训练步骤;总结
  • 大语言模型---ReLU函数的计算过程及其函数介绍
  • 计算机网络实验
  • 【Oracle实战】文章导读
  • 大语言模型中Softmax函数的计算过程及其参数描述
  • JS文件相关✅
  • GPT系列文章
  • buuoj WEB做题笔记
  • STL中vector实现——简单易懂版
  • Kylin Server V10 下基于Sentinel(哨兵)实现Redis高可用集群
  • 【笔记】Android Gradle Plugin配置文件相关说明-libs.versions.toml
  • win10 mmpose mmdeploy mmaction2
  • 单元测试框架gtest学习(二)—— 认识断言
  • Java开发者必备:23种设计模式全面解析
  • 数据结构及算法--排序篇
  • Idea集成ApiFox插件
  • 【Redis_Day5】String类型
  • udp_socket
  • 网络编程 作业2
  • 深度学习day2-Tensor 2