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

【力扣刷题 | 第二十四天】

目录

前言:

416. 分割等和子集 - 力扣(LeetCode)

总结


前言:

        今晚我们爆刷动态规划类型的题目。

416. 分割等和子集 - 力扣(LeetCode)

给你一个 只包含正整数 的 非空 数组 nums 。请你判断是否可以将这个数组分割成两个子集,使得两个子集的元素和相等。

 这道题其实可以用我们之前讲过的回溯算法暴力搜索来做,其基本思想为:我们先对这个数组求和,之后再除以二,此时如果我们如果我们得到了一个整数,就说明这个数组是可以分为两个元素和一样的子集的,如果得不到就说明这个数组根本就没有办法被均分,自然也就无法得到两个元素和一样的子集。

 那么也就是说把这个集合的总和的一半target求出来,然后在集合中搜索,如果可以在原集合中找到一个子集的和==target,那么另一半子集的和自然也就是target。

因此我们简化了这个问题,现在我们要做的是:

在这个集合中找出一个子集,使得子集的和等于target

但问题是使用回溯算法暴力搜索的话,就这道题而言,会超时。因此我们就要再想想还有没有别的方法

答案是有的。其实我们可以把他想为一个背包问题:一共有这么多的数,能否把容量为target的包满

那么不就是一个动态规划的问题嘛那么我们就开始动态规划的五步:
1.确定dp数组的含义以及下标含义:

dp[j]  容量为j的背包 能够容纳的最多价值为 dp[j],而这道题我们可以认为每一个元素的数值即是容量也是价值

如果我们把11这个背包装满之后,他的价值也是11,那么就说明存在一个子集,他的元素和为target

2.状态转移方程:dp[j]= max(dp[j] , dp[j-nums[i]]+nums[i[);

因此我们可以得到代码:

class Solution {
public:bool canPartition(vector<int>& nums) {int sum=0;vector<int> dp(10001, 0);for (int i = 0; i < nums.size(); i++) {sum += nums[i];}if(sum%2==1){return false;}int target = sum/2;for(int i=0;i<nums.size();i++){for(int j=target;j>=nums[i];j--){dp[j]= max(dp[j],dp[j-nums[i]]+nums[i]);}}if(dp[target]==target){return true;}else{return false;}}
};

总结

        动态规划的题目更加灵活多变,有的时候很难想出来这还能用动态规划的思路来做,因此我们要多做多练,才可以学好动态规划。

如果我的内容对你有帮助,请点赞,评论,收藏。创作不易,大家的支持就是我坚持下去的动力!

 

http://www.lryc.cn/news/108868.html

相关文章:

  • PyTorch使用(一)(常用库)
  • React ~ React Router 6
  • 【LeetCode每日一题】——304.二维区域和检索-矩阵不可变
  • 硬件串口通信协议学习(UART、IIC、SPI、CAN)
  • 第一章-JavaScript基础进阶part2:事件
  • 如何优雅的使用后端接口
  • QEMU源码全解析25 —— QOM介绍(14)
  • TopK问题
  • 接口自动化测试-Postman+Newman+Git+Jenkins实战集成(详细)
  • CMake 学习笔记 (Generator Expressions)
  • 提高测试用例质量的6大注意事项
  • 2023牛客暑期多校训练营6 A-Tree (kruskal重构树))
  • 软件测试—支付功能测试
  • 自动化测试的统筹规划
  • 外键字段的增删改查、多表查询(子查询和连表查询、正反向、聚合查询、 分组查询、 F与Q查询)、django中如何开启事务
  • 【学习笔记】生成式AI(ChatGPT原理,大型语言模型)
  • 【Opencv入门到项目实战】(三):图像腐蚀与膨胀操作
  • Autosar诊断系列介绍20 - UDS应用层P2Server/P2Client等时间参数解析
  • 【iOS】json数据解析以及简单的网络数据请求
  • Kubernetes客户端认证—— 基于ServiceAccount的JWTToken认证
  • 45.ubuntu Linux系统安装教程
  • Jmeter函数助手(一)随机字符串(RandomString)
  • SpringCloud之微服务API网关Gateway介绍
  • 机器学习入门之 pandas
  • Django之JWT库与SimpleJWT库的使用
  • Jmeter远程服务模式运行时引用csv文件的路径配置
  • 《OWASP代码审计》学习——注入漏洞审计
  • Linux虚拟机中安装MySQL5.6.34
  • Django的FBV和CBV
  • [每周一更]-(第57期):用Docker、Docker-compose部署一个完整的前后端go+vue分离项目