代码随想录打卡Day36
今天做的头皮发麻,除了第一道题是自己AC的,剩下两道题目都是看视频才AC的,主要是看了视频也花了很久时间才想清楚。
1049. 最后一块石头的重量 II
这道题一开始没什么思路,但是看到提示说和昨天的分割子集很像,然后我就把思路想出来了。这道题目也是先将数组内元素求和然后除以二,背包的最大容量就设置为sum / 2。和昨天那道题一样的思路,在动态规划的时候让背包尽可能装满就行了。在遍历结束以后,求剩下元素与背包最大价值之间的差值即可。
class Solution {
public:int lastStoneWeightII(vector<int>& stones) {//1.确定dp[i][j]的含义:在背包容量为j,下标为[0, i]的数字组合中的最优方案的最大价值//2.确定递推公式 dp[i][j] = max(dp[j], dp[j - weight[i]] + value[i])//3.dp数组初始化 dp初始化为0向量//4.确定遍历顺序:先物品,再背包(可互换)//5.打印数组(省略)int sum = accumulate(stones.begin(), stones.end(), 0);vector<vector<int>> dp(stones.size(), vector<int>(sum / 2 + 1));//初始化for(int i = 0; i < stones.size(); i++)dp[i][0] = 0;for(int i = 1; i <= sum / 2; i++){if(i >= stones[0]) dp[0][i] = stones[0];else dp[0][i] = 0;}//开始动态规划for(int i = 1; i < stones.size(); i++){for(int j = 1; j <= sum / 2; j++){if(j < stones[i]) dp[i][j] = dp[i - 1][j];else dp[i][j] = max(dp[i - 1][j], dp[i - 1][j - stones[i]] + stones[i]);}}return sum - 2 * dp[stones.size() - 1][sum / 2];}
};
494. 目标和
笑死,思路根本就想不到,看了视频才AC的,但是按照视频的思路还是遇到一个测试样例(nums = [0,0,0,0,0,0,0,0,1],target=1)通过不了,想了一下,把遍历条件中的>改成了>=,然后就全部AC了,我觉得这个改动主要还是为了应对这个极端的测试案例,其余情况下用>是可以直接AC的。我发现但凡dp数组元素代表的不是最大价值,如符合条件的组合个数,符合条件的集合长度等,则遍历背包的时候必须要倒序遍历来避免重复问题,这道题目主要就难在dp数组的含义很难构造,且初始化条件很不好想,一旦明确了dp数组的含义和初始条件,递推公式起始很好想。
class Solution {
public:int findTargetSumWays(vector<int>& nums, int target) {//1.确定dp[j]的含义:在背包容量为j的情况下,有dp[j]种方法达到指定价值//2.确定递推公式 dp[j] = dp[j] + dp[my_target - j]//3.dp数组初始化 dp[0] = 1//4.确定遍历顺序:先物品,再背包(背包倒序遍历)//5.打印数组(省略)int sum = accumulate(nums.begin(), nums.end(), 0);if(((sum + target) % 2 == 1) || (abs(target) > sum)) return 0; //target取值不合理,达不到//可以达到targetint m = nums.size();int n = (sum + target) / 2;vector<int> dp(n + 1, 0);//初始化dp[0] = 1;//开始动态规划for(int i = 0; i < m; i++){for(int j = n; j >= 0; j--){if(j < nums[i]) continue;dp[j] += dp[j - nums[i]];} }return dp.back();}
};
474.一和零
被这道题爆杀了,刚看到这道题用二维dp数组也不知道该怎么写,这道题的背包容量实际上有两个维度,一个是0的容量,一个是1的容量,题目要求的是符合条件的最大子集长度,并不是直接求最大价值,所以这道题也需要倒序遍历背包,dp数组的含义是:背包最多能装i个0和j个1的情况下,符合条件的子集的最大长度。这道题的初始化很简单,dp[0][0] = 0。递推公式有点难想,如果背包能装下,则装下当前字符串后的子集长度为dp[i - x][j - y] + 1,当然,在遍历的时候需要维护最大长度,所以应该用max函数将其与自身比较。在遍历结束后,直接返回dp[m][n]即可。
class Solution {
public:int findMaxForm(vector<string>& strs, int m, int n) {//1.确定dp[i][j]的含义:在背包容量最多装i个0和j个1的情况下的最长子集的长度//2.确定递推公式 dp[i][j] = max(dp[i - x][j - y] + 1, dp[i][j])//其中x为当前遍历元素的0的个数,y为当前遍历元素的1的个数//3.dp数组初始化 dp[0] = 1//4.确定遍历顺序:先物品,再背包(背包倒序遍历)//5.打印数组(省略)vector<vector<int>> dp(m + 1, vector<int> (n + 1, 0));//初始化dp[0][0] = 0;//开始动态规划for(string s : strs){ //外层循环遍历字符串(物品)//统计当前字符串的0,1个数int x = 0, y = 0;for(char c : s){if(c == '0') x += 1;else y += 1;}//遍历背包(特殊情况,用两层for循环才能实现)for(int i = m; i >= 0; i--){if(i < x) break;for(int j = n; j >= 0; j--){if(j < y) break;dp[i][j] = max(dp[i - x][j - y] + 1, dp[i][j]);}}}return dp[m][n];}
};
做的破大防啊!!!!!!
相关文章:

代码随想录打卡Day36
今天做的头皮发麻,除了第一道题是自己AC的,剩下两道题目都是看视频才AC的,主要是看了视频也花了很久时间才想清楚。 1049. 最后一块石头的重量 II 这道题一开始没什么思路,但是看到提示说和昨天的分割子集很像,然后我…...

速盾:凡科建站开cdn了吗?
凡科建站是一家专业的建站平台,提供了多种功能和工具来帮助用户快速搭建自己的网站。随着互联网技术的不断发展,网站的访问速度和稳定性成为了越来越重要的考虑因素。为了优化用户体验,提高网站的加载速度,凡科建站已经开启了CDN&…...

python贪吃蛇游戏项目源码【免费】
使用Pygame库实现的贪吃蛇游戏。Pygame是一个用于创建视频游戏的Python模块集合,它提供了图形和声音库,使游戏开发变得容易。 初始化设置 屏幕大小 (SCREEN_WIDTH, SCREEN_HEIGHT): 定义了游戏窗口的宽度和高度。方格大小 (SIZE): 定义了游戏中每个小方…...

Mycat搭建分库分表
分库分表解决的问题 单表数据量过大带来的性能和存储容量的限制的问题: 索引效率下降读写瓶颈存储容量限制事务性能问题分库分表架构 再搭建一对主从复制节点,3307主节点,3309从节点配置数据源 dw1 , dr1,创建集群c1创建逻辑库 CREATE DATAB…...

Python中的数据结构
1.列表 可以将列表理解为一个购物清单,这个清单里面的的每个元素可以是任何类型,并且可以重复(这里区别了列表与数组)。列表用“[]”表示。 #这里定义了一个列表,列表中的元素的类型不同。 lsit_a [a, b, c, 1, 2] …...

mysql笔记8(多表查询)
文章目录 1. union联合查询可能会用到去重操作 2. inner join 内连接3. left join 左连接4. right join 右连接5. cross join 交叉连接6. natural join 自然连接natural left join 自然左连接natural right join 自然右连接自然连接的两张表没有同名字段怎么办? 7. …...

typescript-tsconfig文件解释
ts.config.json 作用 用于标识 TypeScript 项目的根路径用于配置 TypeScript 编译器用于指定编译的文件 重要字段 files - 设置要编译的文件的名称;include - 设置需要进行编译的文件,支持路径模式匹配;exclude - 设置无需进行编译的文件…...

所有用贪心的算法和所有用动态规划(dp)的算法合集
贪心 纯贪心算法(常在普及组中做暴力题正解使用)DijkstraBFS(最短路径)KruskalPrimSollin(Boruvka)二分三分最值排序LCA(纯贪心版) 动态规划(dp) Floyd线性DP区间DP背…...
论文阅读 | 基于流模型和可逆噪声层的鲁棒水印框架(AAAI 2023)
Flow-based Robust Watermarking with Invertible Noise Layer for Black-box DistortionsAAAI, 2023,新加坡国立大学&中国科学技术大学本论文提出一种基于流的鲁棒数字水印框架,该框架采用了可逆噪声层来抵御黑盒失真。 一、问题 基于深度神经网络…...

上线跨境电商商城的步骤
上线一个跨境电商商城涉及多个步骤,从前期准备到上线后的维护。以下是一些关键步骤: 1. 市场调研与规划 目标市场分析:研究目标市场的需求、竞争对手和消费者行为。法律法规:了解并遵守目标市场的法律法规,包括税收、…...

Python基础(七)——PyEcharts数据分析(面向对象版)
四、使用PyEcharts数据分析案例(面向对象版) 【前言:为了巩固之前的Python基础知识(一)到(五),并为后续使用Python作为数据处理的好帮手,我们一起来用面向对象的思想来理…...

滚雪球学SpringCloud[5.1讲]: Spring Cloud Config详解
全文目录: 前言1. Spring Cloud Config的基本概念1.1 微服务配置管理的挑战1.2 Spring Cloud Config的架构 2. 配置服务端与客户端的配置2.1 配置服务端的搭建2.2 配置客户端的搭建2.3 环境隔离配置 3. 配置中心与Git的集成3.1 Git仓库的目录结构设计3.2 配置的版本…...

Unity常用随机数算法
Unity的Random.Range介绍 有两个重载: 如果参数存在至少一个浮点数那么将会触发public static float Range(float minInclusive, float maxInclusive); 返回一个范围内的浮点数(包含首尾) 如果参数都是整形则触发public static int Range(int minInclusive, int maxExclusiv…...

dial unix /var/run/docker.sock: connect: permission denied
要解决 permission denied 错误并授予当前用户 sunyuhua 访问 Docker 的权限,您可以按照以下步骤操作: 1. 检查 Docker 服务是否在运行 首先,确保 Docker 服务已经启动: sudo systemctl start docker sudo systemctl enable do…...

Prompt提示词技巧
文章目录 🍊 探索AI内容创作核心:提示词Prompt1 什么是提示词工程?1.1 提示词的原理1.2 提示词工程师的前景1.3 提示词工程师的门槛是否较低?1.4 提示词的未来展望 2 提示词编写的基本技巧3 常见的提示词框架3.1 CO-STAR框架3.2 BORKE框架3.…...

滑动窗口(6)_找到字符串中所有字母异位词
个人主页:C忠实粉丝 欢迎 点赞👍 收藏✨ 留言✉ 加关注💓本文由 C忠实粉丝 原创 滑动窗口(6)_找到字符串中所有字母异位词 收录于专栏【经典算法练习】 本专栏旨在分享学习算法的一点学习笔记,欢迎大家在评论区交流讨论Ǵ…...

【无标题】rocket
rocketMQ集群双主双从同步模式(2m-2s-sync)搭建-CSDN博客 集群架构概念 在部署的时候首先要将nameserver启动起来,之后就是将broker启动起来,broker启动起来会将自己的信息注册到nameserver上面。之后再去创建topic,因为发消息的逻辑和收消…...

Maven国内镜像(四种)
配置Maven使用国内镜像是一个常见的做法,因为这样可以显著提高依赖下载的速度并避免网络不稳定带来的问题 在 settings.xml 文件中,需要添加或修改 <mirrors> 标签来指定国内镜像。 以下是几个可用的镜像 1. 阿里云 <mirrors> <mi…...

Linux环境中如何快速修改 JAR 包中的配置文件
在日常的 Java 开发中,我们时常会遇到需要修改 JAR 包中某个配置文件的情况。比如,某些场景下你可能需要调整 application-dev.yml 文件中的配置信息。但解压整个 JAR 包再重新打包会显得比较繁琐。本文将介绍一种快捷的方法,帮助你快速查找并…...

java高频面试题(2024最新)
HashMap使用哪些方法来解决哈希冲突? 使用链地址法(使用散列表)来链接拥有相同hash值的数据;使用2次扰动函数(hash函数)来降低哈希冲突的概率,使得数据分布更平均;引入红黑树进一步…...

WEB 编程:使用富文本编辑器 Quill 配合 WebBroker 后端
使用 Delphi 的 WebBroker 框架写 Web Server,需要一个前端的富文本编辑器。 评估了好几个,最后选择 Quill 这个开源的。 官方地址:Quill - Your powerful rich text editor 把前端代码,存储为一个单独的文本文件,方…...

新书出版,大陆首本NestJS图书《NestJS全栈开发解析:快速上手与实践》
新书全栈实战项目:数字门店管理平台开源啦🎉🎉🎉 GitHub地址(持续更新NestJS企业级实践):欢迎star⭐️⭐️⭐️ 前端ReactTypeScriptVite 后端NestMySQLRedisDocker 前言 对,你没看…...

面试题:react、vue中的key有什么作用?(key的内部原理)
1.虚拟DOM中key的作用: key是虚拟DOM对象的标识,当数据发生变化时,vue会根据【新数据】生成【新的虚拟DOM】随后Vue进行【新虚拟DOM】与【旧虚拟DOM】的差异比较,比较规则如下: 2.对比规则: (1).旧虚拟DOM中找到了与新虚拟DOM相同的key: …...

基于python+django+vue的外卖管理系统
作者:计算机学姐 开发技术:SpringBoot、SSM、Vue、MySQL、JSP、ElementUI、Python、小程序等,“文末源码”。 专栏推荐:前后端分离项目源码、SpringBoot项目源码、SSM项目源码 系统展示 【2025最新】基于pythondjangovueMySQL的外…...

初始分布式系统和Redis特点(
(一)认识redis Redis是一个开源(BSD许可),内存存储的数据结构服务器,可用作数据库,高速缓存和消息队列代理。它支持字符串、哈希表、列表、集合、有序集合,位图,hyperlog…...

计算机毕业设计 家电销售展示平台的设计与实现 Java实战项目 附源码+文档+视频讲解
博主介绍:✌从事软件开发10年之余,专注于Java技术领域、Python人工智能及数据挖掘、小程序项目开发和Android项目开发等。CSDN、掘金、华为云、InfoQ、阿里云等平台优质作者✌ 🍅文末获取源码联系🍅 👇🏻 精…...

Android RecyclerView 缓存机制深度解析与面试题
本文首发于公众号“AntDream”,欢迎微信搜索“AntDream”或扫描文章底部二维码关注,和我一起每天进步一点点 引言 RecyclerView 是 Android 开发中用于展示列表和网格的强大组件。它通过高效的缓存机制,优化了滑动性能和内存使用。本文将深入…...

管道缺陷检测系统源码分享
管道缺陷检测检测系统源码分享 [一条龙教学YOLOV8标注好的数据集一键训练_70全套改进创新点发刊_Web前端展示] 1.研究背景与意义 项目参考AAAI Association for the Advancement of Artificial Intelligence 项目来源AACV Association for the Advancement of Computer Vis…...

python定时发送邮件的功能如何实现自动化?
Python定时发送邮件教程?如何用Python发送电子邮件? Python定时发送邮件不仅能够帮助我们自动处理日常的邮件发送任务,还能在特定时间点触发邮件发送,确保信息的及时传达。AokSend将详细探讨如何利用Python实现定时发送邮件的自动…...

工业机器人9公里远距离图传模块,无人机低延迟高清视界,跨过距离限制
在科技日新月异的今天,无线通信技术正以未有的速度发展,其中,图传模块作为连接现实与数字世界的桥梁,正逐步展现出其巨大的潜力和应用价值。今天,我们将聚焦一款引人注目的产品——飞睿智能9公里远距离图传模块&#x…...