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

代码随想录算法训练营29期|day43 任务以及具体任务

章 动态规划 part05

  •  1049. 最后一块石头的重量 II 
    class Solution {public int lastStoneWeightII(int[] stones) {int sum = 0;for (int i : stones) {sum += i;}int target = sum >> 1;//初始化dp数组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];}
    }

    思路:典型的01背包问题,dp[]数组表示指定背包容积所能放的最大石头重量,递推公式就是典型的01背包,初始化dp数组为0.

  •  494. 目标和 
    class Solution {public int findTargetSumWays(int[] nums, int target) {int sum = 0;for (int i = 0; i < nums.length; i++) sum += nums[i];//如果target过大 sum将无法满足if ( target < 0 && sum < -target) return 0;if ((target + sum) % 2 != 0) return 0;int size = (target + sum) / 2;if(size < 0) size = -size;int[] dp = new int[size + 1];dp[0] = 1;for (int i = 0; i < nums.length; i++) {for (int j = size; j >= nums[i]; j--) {dp[j] += dp[j - nums[i]];}}return dp[size];}
    }

    思路:01背包的思路,dp数组表示能装满j有几种方案。递推公式和01背包类似,表示加上装进去nums[i]的dp[j - nums[i]]。初始化:将dp[0]初始化为1。

  •  474.一和零  
    class Solution {public int findMaxForm(String[] strs, int m, int n) {//dp[i][j]表示i个0和j个1时的最大子集int[][] dp = new int[m + 1][n + 1];int oneNum, zeroNum;for (String str : strs) {oneNum = 0;zeroNum = 0;for (char ch : str.toCharArray()) {if (ch == '0') {zeroNum++;} else {oneNum++;}}//倒序遍历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];}
    }

    思路:相当于两个维度的背包m和n,要考虑两个背包,dp数组表示i个0和j个1的最大子集。递归遍历strs字符串数组,然后倒序遍历m和n,确定递推公式。

相关文章:

  • leetcode-hot100树的专题
  • 验证码倒计时:用户界面的小细节,大智慧
  • 多维时序 | Matlab实现RF-Adaboost随机森林结合Adaboost多变量时间序列预测
  • SSL协议是什么?关于SSL和TLS的常见问题解答
  • Map 集合
  • 编译原理实验1——词法分析(python实现)
  • @ResponseBody
  • 创建TextMeshPro字体文件
  • jvm几个常见面试题整理
  • 三网码支付系统源码,三网免挂有PC软件,有云端源码,附带系统搭建教程
  • SpringBoot 过滤器Filter 拦截请求 生命周期
  • Scala 和 Java在继承机制方面的区别
  • 【Java万花筒】数据的安全钥匙:Java的加密与保护方法
  • 幻方(Magic Square)
  • 神经网络基本原理
  • angular学习第一篇-----环境搭建
  • bearychat的java client
  • CoolViewPager:即刻刷新,自定义边缘效果颜色,双向自动循环,内置垂直切换效果,想要的都在这里...
  • HTTP中的ETag在移动客户端的应用
  • JavaScript 无符号位移运算符 三个大于号 的使用方法
  • Javascript编码规范
  • PHP 7 修改了什么呢 -- 2
  • SegmentFault 2015 Top Rank
  • Theano - 导数
  • 工作中总结前端开发流程--vue项目
  • 前端面试之CSS3新特性
  • 前端自动化解决方案
  • 深入浏览器事件循环的本质
  • 详解移动APP与web APP的区别
  • 看到一个关于网页设计的文章分享过来!大家看看!
  • 《码出高效》学习笔记与书中错误记录
  • ​ArcGIS Pro 如何批量删除字段
  • ​Python 3 新特性:类型注解
  • ​批处理文件中的errorlevel用法
  • ![CDATA[ ]] 是什么东东
  • #define MODIFY_REG(REG, CLEARMASK, SETMASK)
  • #define 用法
  • #考研#计算机文化知识1(局域网及网络互联)
  • (42)STM32——LCD显示屏实验笔记
  • (Redis使用系列) Springboot 使用redis实现接口Api限流 十
  • (免费领源码)Python#MySQL图书馆管理系统071718-计算机毕业设计项目选题推荐
  • (十八)devops持续集成开发——使用docker安装部署jenkins流水线服务
  • (四)c52学习之旅-流水LED灯
  • (未解决)jmeter报错之“请在微信客户端打开链接”
  • (转)setTimeout 和 setInterval 的区别
  • .Family_物联网
  • .NET 8.0 发布到 IIS
  • .NET(C#、VB)APP开发——Smobiler平台控件介绍:Bluetooth组件
  • .net打印*三角形
  • .Net高阶异常处理第二篇~~ dump进阶之MiniDumpWriter
  • .NET基础篇——反射的奥妙
  • .NET命令行(CLI)常用命令
  • @四年级家长,这条香港优才计划+华侨生联考捷径,一定要看!
  • [ 渗透工具篇 ] 一篇文章让你掌握神奇的shuize -- 信息收集自动化工具
  • [Android]RecyclerView添加HeaderView出现宽度问题