算法专题:线性DP

参考练习习题总集

文章目录

  • 10. 正则表达式匹配
  • 44. 通配符匹配
  • 45. 跳跃游戏
  • 53. 最大子数组和
  • 91. 解码方法
  • 97. 交错字符串
  • 115. 不同的子序列
  • 119. 杨辉三角II
  • LCR 161. 连续天数的最高销售额

10. 正则表达式匹配

第一道题就是困难题让我很难蚌。真是磨人啊。

class Solution {
public:bool isMatch(string s, string p) {int * * matrix=new int * [p.size()+1];for (int i=0;i<p.size()+1;i++){matrix[i]=new int [s.size()+1];for (int j=0;j<s.size()+1;j++)matrix[i][j]=0;}matrix[0][0]=1;for (int i=1;i<p.size();i+=2){if (p[i]=='*') matrix[i+1][0]=1;else break;}for (int i=1;i<p.size()+1;i++)for (int j=1;j<s.size()+1;j++)if (s[j-1]==p[i-1] or p[i-1]=='.'){if (matrix[i-1][j-1]==1){matrix[i][j]=1;}}else if (p[i-1]=='*'){if (matrix[i-2][j]==1){matrix[i][j]=1;continue;}if (matrix[i][j-1]==1 and (s[j-1]==p[i-2] or p[i-2]=='.'))matrix[i][j]=1;}bool result=matrix[p.size()][s.size()];for (int i=0;i<p.size()+1;i++)delete [] matrix[i];return result;}
};

44. 通配符匹配

嗨嗨嗨,思想差不多的,又水一道困难题。

class Solution {
public:bool isMatch(string s, string p) {int len1=s.size(),len2=p.size();int * * matrix=new int * [len2+1];for (int i=0;i<len2+1;i++){matrix[i]=new int [len1+1];for (int j=0;j<len1+1;j++)matrix[i][j]=0;}matrix[0][0]=1;for (int i=0;i<len2;i++)if (p[i]=='*') matrix[i+1][0]=1;else break;for (int i=1;i<len2+1;i++)for (int j=1;j<len1+1;j++){if (s[j-1]==p[i-1] or p[i-1]=='?'){if (matrix[i-1][j-1]==1)matrix[i][j]=1;}else if (p[i-1]=='*'){if (matrix[i-1][j]==1){matrix[i][j]=1;continue;}if (matrix[i-1][j-1]==1 or matrix[i][j-1]==1)matrix[i][j]=1;}}bool result=matrix[len2][len1];for (int i=0;i<len2+1;i++)delete [] matrix[i];return result;}
};

45. 跳跃游戏

记忆化搜索。这里的记忆化搜索本质就是线性DP。做这道题时真是气死我了,一开始明明记着长度为0的时候需要特判,但是后面做着做着就忘了加上去,交了一次又发现if (temp[i]!=0) return temp[i];没有加上去,连着犯了两次低级错误。

class Solution {
public:vector<int> lb;vector<int> temp;int jump(vector<int>& nums) {if (nums.size()==1) return 0;lb=nums;temp.resize(nums.size(),0);return dfs(0);}int dfs(int i){if (temp[i]!=0) return temp[i];if (i+lb[i]>=lb.size()-1) return 1;int result=1e4-1;for (int j=lb[i];j>=1;j--){int result_temp=dfs(i+j)+1;if (result_temp<result)result=result_temp;}temp[i]=result;return result;}
};

53. 最大子数组和

前缀和。

class Solution {
public:int maxSubArray(vector<int>& nums) {int * lb=new int [nums.size()+1];lb[0]=0;for (int i=1;i<nums.size()+1;i++)lb[i]=lb[i-1]+nums[i-1];int min_value=0,result=INT_MIN;for (int i=1;i<nums.size()+1;i++){int result_temp=lb[i]-min_value;if (result_temp>result) result=result_temp;if (lb[i]<min_value) min_value=lb[i];}delete [] lb;return result;}
};

线性DP。

class Solution {
public:int maxSubArray(vector<int>& nums) {for (int i=1;i<nums.size();i++)if (nums[i-1]>0)nums[i]+=nums[i-1];int result=INT_MIN;for (int i=0;i<nums.size();i++)if (nums[i]>result)result=nums[i];return result;}
};

91. 解码方法

class Solution {
public:int numDecodings(string s) {if (s[0]=='0') return 0;int * lb=new int [s.size()+1];lb[0]=0;lb[1]=1;for (int i=2;i<s.size()+1;i++)if (s[i-1]=='0'){if (s[i-2]=='1' or s[i-2]=='2')lb[i]=max(lb[i-2],1);else return 0;}else{lb[i]=lb[i-1];if (s[i-2]=='1' or (s[i-2]=='2' and s[i-1]<='6'))lb[i]+=max(lb[i-2],1);}int result=lb[s.size()];delete [] lb;return result;}
};

97. 交错字符串

记忆化搜索。

class Solution {
public:string string1,string2,string3;vector<vector<int>> temp;bool isInterleave(string s1, string s2, string s3) {if (s1.size()+s2.size()!=s3.size()) return false;string1=s1;string2=s2;string3=s3;temp.resize(s1.size()+1,vector<int> (s2.size()+1,0));return func(0,0);}bool func(int l1,int l2){if (l1==string1.size() and l2==string2.size()) return true;if (temp[l1][l2]!=0) return temp[l1][l2]==1;bool result=false;if (l1<string1.size() and string1[l1]==string3[l1+l2])result|=func(l1+1,l2);if (l2<string2.size() and string2[l2]==string3[l1+l2])result|=func(l1,l2+1);temp[l1][l2]=result?1:-1;return result;}
};

线性DP。

class Solution {
public:bool isInterleave(string s1, string s2, string s3) {if (s1.size()+s2.size()!=s3.size()) return false;int * * matrix=new int * [s1.size()+1];for (int i=0;i<s1.size()+1;i++){matrix[i]=new int [s2.size()+1];for (int j=0;j<s2.size()+1;j++)matrix[i][j]=0;}queue<pair<int,int>> dl;dl.push(make_pair(0,0));while (1){queue<pair<int,int>> temp;if (dl.front().first+1<=s1.size())temp.push(make_pair(dl.front().first+1,dl.front().second));while (!dl.empty()){int x=dl.front().first,y=dl.front().second;if (x==0 and y==0) matrix[x][y]=1;else if (x==0){if (matrix[x][y-1]==1 and s2[y-1]==s3[y-1])matrix[x][y]=1;}else if (y==0){if (matrix[x-1][y]==1 and s1[x-1]==s3[x-1])matrix[x][y]=1;}else{if ((matrix[x][y-1]==1 and s2[y-1]==s3[x+y-1]) or (matrix[x-1][y]==1 and s1[x-1]==s3[x+y-1]))matrix[x][y]=1;}if (dl.front().second+1<=s2.size())temp.push(make_pair(dl.front().first,dl.front().second+1));dl.pop();}if (temp.empty()) break;dl=temp;}bool result=matrix[s1.size()][s2.size()];for (int i=0;i<s1.size()+1;i++)delete [] matrix[i];return result;}
};

115. 不同的子序列

wtql,感觉神功大成。

class Solution {
public:int numDistinct(string s, string t) {int mod=1e9+7;int * * matrix=new int * [s.size()+1];for (int i=0;i<s.size()+1;i++){matrix[i]=new int [t.size()+1];for (int j=0;j<t.size()+1;j++)matrix[i][j]=0;}for (int i=1;i<s.size()+1;i++)for (int j=1;j<t.size()+1;j++)if (s[i-1]==t[j-1]){matrix[i][j]=(matrix[i][j]+matrix[i-1][j])%mod;matrix[i][j]=(matrix[i][j]+matrix[i-1][j-1])%mod;if (j==1) matrix[i][j]+=1;}else matrix[i][j]=matrix[i-1][j];int result=matrix[s.size()][t.size()];for (int i=0;i<s.size()+1;i++)delete [] matrix[i];return result%mod;}
};

119. 杨辉三角II

简单题!!!

class Solution {
public:vector<int> getRow(int rowIndex) {vector<vector<int>> lb={{1}};for (int i=1;i<=rowIndex;i++){vector<int> temp;temp.push_back(1);for (int j=1;j<i;j++)temp.push_back(lb[i-1][j-1]+lb[i-1][j]);temp.push_back(1);lb.push_back(temp);}return lb[rowIndex];}
};

LCR 161. 连续天数的最高销售额

前缀和。

class Solution {
public:int maxSales(vector<int>& sales) {int * lb=new int [sales.size()+1];lb[0]=0;for (int i=1;i<sales.size()+1;i++)lb[i]=lb[i-1]+sales[i-1];int min_value=0,result=INT_MIN;for (int i=1;i<sales.size()+1;i++){int result_temp=lb[i]-min_value;if (result_temp>result) result=result_temp;if (lb[i]<min_value) min_value=lb[i];}delete [] lb;return result;}
};

线性DP。
和53. 最大子数组和一样。
虽然做每道题的时间可能会有点久,但是再也不像以前那样完全没有办法了,那就这样吧。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/684204.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

【JavaEE】_文件与IO

目录 1.文件概述 1.1 文件的概念 1.2 文件的存储 1.3 文件的分类 1.4 目录结构 1.5 文件操作 1.5.1 文件系统操作 1.5.2 文件内容操作 2. Java文件系统操作 2.1 File类所处的包 2.2 构造方法 2.3 方法 2.3.1 与文件路径、文件名有关的方法 2.3.2 文件是否存在与普…

RISC-V和ARM

参考&#xff1a;https://www.eet-china.com/mp/a39867.html RISC-V和ARM都是基于**精简指令集计算 (RISC)**原理建立的指令集架构。他们的主要区别在于他们的授权模式和开放性&#xff1a; ARM 是一种专有的指令集架构&#xff0c;众多使用ARM架构的厂商&#xff0c;只能根据…

openGauss学习笔记-221 openGauss性能调优-确定性能调优范围-分析作业是否被阻塞

文章目录 openGauss学习笔记-221 openGauss性能调优-确定性能调优范围-分析作业是否被阻塞221.1 操作步骤 openGauss学习笔记-221 openGauss性能调优-确定性能调优范围-分析作业是否被阻塞 数据库系统运行时&#xff0c;在某些业务场景下查询语句会被阻塞&#xff0c;导致语句…

【MySQL】操作库 —— 表的操作 -- 详解

一、增加表 1、创建表 mysql> create database [if not exists] table_name ( -> field1 datatype, -> field2 datatype, -> field3 datatype -> ) character set 字符集 collate 校验规则 engine 存储引擎; 注意 &#xff1a;最后一行也可以写成&#x…

Vue源码系列讲解——模板编译篇【二】(整体运行流程)

目录 1. 整体流程 2. 回到源码 3. 总结 1. 整体流程 上篇文章中我们说了&#xff0c;在模板解析阶段主要做的工作是把用户在<template></template>标签内写的模板使用正则等方式解析成抽象语法树&#xff08;AST&#xff09;。而这一阶段在源码中对应解析器&…

c语言操作符(上)

目录 ​编辑 原码、反码、补码 1、正数 2、负数 3、二进制计算1-1 移位操作符 1、<<左移操作符 2、>>右移操作符 位操作符&、|、^、~ 1、&按位与 2、|按位或 3、^按位异或 特点 4、~按位取反 原码、反码、补码 1、正数 原码 反码 补码相同…

MongoDB聚合操作符:$acos

$acos操作符返回一个值的反余弦。从MongoDB4.2版本开始支持。 语法 { $acos: <expression> }$acos接受任何可被解析为值在-1到1之间的表达式&#xff0c;即&#xff1a;-1 < value < 1$acos返回值以弧度为单位&#xff0c;使用$radiansToDegrees操作符可以把输出…

CDN直播基础概念与优化思路

基础概念 源站&#xff1a;中心服务器边缘服务器&#xff1a;即CDN服务&#xff0c;用于加速和分发客户端&#xff1a;访问源站服务的网民主播&#xff1a;向源站推送视频LDNS&#xff1a;本地配置DNS服务器的地址&#xff0c;用于调度解析CDN服务器的IP地址&#xff0c;由于用…

STM32 HAL库 STM32CubeMX -- IWDG(独立看门狗)

STM32 HAL库 STM32CubeMX -- IWDG 一、IWDG简介二、独立看门狗的工作原理三、驱动函数初始化函数HAL IWDG Init()初始化函数HAL IWDG Init()其他宏函数 四、超时时间计算第一种办法第二种办法&#xff08;推荐&#xff09; 一、IWDG简介 看门狗(Watchdog)就是MCU上的一种特殊的…

【AIGC】Stable Diffusion的模型入门

下载好相关模型文件后&#xff0c;直接放入Stable Diffusion相关目录即可使用&#xff0c;Stable Diffusion 模型就是我们日常所说的大模型&#xff0c;下载后放入**\webui\models\Stable-diffusion**目录&#xff0c;界面上就会展示相应的模型选项&#xff0c;如下图所示。作者…

计算机网络——多媒体网络

前些天发现了一个巨牛的人工智能学习网站 通俗易懂&#xff0c;风趣幽默&#xff0c;忍不住分享一下给大家&#xff0c; 跳转到网站 小程一言 我的计算机网络专栏&#xff0c;是自己在计算机网络学习过程中的学习笔记与心得&#xff0c;在参考相关教材&#xff0c;网络搜素…

保育员考试怎么搜题找答案?9个不限次的公众号和软件分享啦! #经验分享#学习方法

学会运用各类学习辅助工具和资料&#xff0c;是大学生培养自主学习能力和信息获取能力的重要途径之一。 1.粉鹿搜题 这是一个公众号 使用方法也很简单&#xff0c;将题目发送至公众号后台&#xff0c;即可得到题目答案~ 下方附上一些测试的试题及答案 1、下列哪项是聚合式联…

DS Wannabe之5-AM Project: DS 30day int prep day18

Q1. What is Levenshtein Algorithm? Levenshtein算法&#xff0c;也称为编辑距离算法&#xff0c;是一种量化两个字符串之间差异的方法。它通过计算将一个字符串转换成另一个字符串所需的最少单字符编辑操作次数来实现。这些编辑操作包括插入、删除和替换字符。Levenshtein距…

掌握Go并发:Go语言并发编程深度解析

&#x1f3f7;️个人主页&#xff1a;鼠鼠我捏&#xff0c;要死了捏的主页 &#x1f3f7;️系列专栏&#xff1a;Golang全栈-专栏 &#x1f3f7;️个人学习笔记&#xff0c;若有缺误&#xff0c;欢迎评论区指正 前些天发现了一个巨牛的人工智能学习网站&#xff0c;通俗易懂&…

第三讲 数据存储

面向磁盘的架构 DBMS 假定数据库的主要存储位置位于非易失性磁盘【non-volatile disk】上。 DBMS 的组件管理非易失性【non-volatile】和易失性【volatile】存储之间的数据移动。 为了理解来回移动数据的影响&#xff0c;我们首先要先理解存储层次结构是什么样的。 存储层次【…

什么情况不满足最左匹配原则,为什么呢?

最左匹配原则是指在查询条件中使用了复合索引时&#xff0c;索引可以被用于查找满足查询条件的数据的最左前缀。如果查询中的条件不满足索引的最左前缀&#xff0c;索引将不会被使用&#xff0c;从而导致索引失效。 然而&#xff0c;有以下情况可能不满足最左匹配原则&#xf…

Vue2源码梳理:render函数的实现

render 在 $mount 时&#xff0c;会调用 render 方法在写 template 时&#xff0c;最终也会转换成 render 方法Vue 的 _render 方法是实例的一个私有方法&#xff0c;它用来把实例渲染成一个虚拟 Node它的定义在 src/core/instance/render.js 文件中&#xff0c;它返回的是一个…

[前端开发] CSS基础知识 [上]

下篇:CSS基础知识 [下] CSS基础知识 [上] CSS 学习CSS 引入方式选择器 文字属性盒模型盒模型分类盒模型应用 盒模型单位 CSS 学习 层叠样式表&#xff08;Cascading Style Sheets&#xff0c;缩写为 CSS&#xff09;是一种样式表语言&#xff0c;用来描述 HTML 或 XML&#xf…

文生图提示词:气候特征

天气和气候 --气候特征 Climate Features 气候特征的基本词汇&#xff0c;涵盖了温度和湿度的变化&#xff0c;以及它们在不同气候类型中的体现。 Hot 炎热 Cold 寒冷 Warm 温暖 Cool 凉爽 Humid 湿润 Dry 干燥 Mild 温和 Chilly 冷飕飕 Freezing 冰冻 Sweltering 酷热 Frosty …

RK3568平台开发系列讲解(实验篇)杂项设备驱动实验

🚀返回专栏总目录 文章目录 一、什么是杂项设备驱动二、杂项设备的注册和卸载三、杂项设备驱动实验代码沉淀、分享、成长,让自己和他人都能有所收获!😄 一、什么是杂项设备驱动 在 Linux 中,把无法归类的五花八门的设备定义成杂项设备。相较于字符设备,杂项设备有以下两…