秋招突击——算法打卡——5/30——复习{最大上升子序列的和、面试算法缺陷补充}——新做:{回文数+补充 自定义Stoi实现、正则表达式匹配}

文章目录

    • 复习
      • 导弹拦截——最大上升子序列和
        • 推理过程
        • 实现代码
        • 补充昨日面试
    • 新作
      • 回文数
        • 实现代码
      • 字符串转整数
      • 正则表达式匹配
        • 个人实现
          • 思路分析
          • 实现代码如下
        • 参考做法
          • 思路分析
          • 实现代码
    • 总结

复习

导弹拦截——最大上升子序列和

  • 同样类型题目链接:导弹拦截
  • 重做这道题主要是在看一遍最大上升子序列,应该怎么写?使用二维矩阵进行动态规划应该怎么写?昨天面试的时候,一维的矩阵写出来,但是二维的没整明白。
    • 校正
      • 这里搞错了,是针对那种二维迷宫的问题,是可以使用滚动数组进行优化的,但是对于这个最大上升子序列,本身的动态规划就是一维的,记错了,尴尬!!!
      • 可以使用滚动数组优化的DP问题链接——采药问题

在这里插入图片描述

推理过程

在这里插入图片描述

实现代码
const int N = 1010;
int f[N],w[N];
int n;int main(){cin>>n;for (int i = 1; i <= n; ++i) {cin>>w[i];}// 计算最大上升子序列和,并更新动态规划矩阵for (int i = 1; i <= n; ++i) {f[i] = w[i];for (int j = 1; j <= i; ++j) {if(w[j] < w[i]){f[i] = max(f[i],f[j] + w[i]);}}}// 求其最大上升子序列和的值int res = 0;for (int i = 1; i <= n; ++i) {res = res > f[i] ? res :f[i];}cout<<res<<endl;
}
补充昨日面试
  • 昨天面试的时候,要写代码,有两个地方不确定

定义sort函数的排序函数

  • 自定义比较,定义一个compare函数
    在这里插入图片描述
  • 使用Lamdba表达式
    • 好家伙,蛮丢弃人的,原来我笔试的时候写错了,尴尬
      在这里插入图片描述

pair数据的使用

  • 创建pair变量

    • 使用{},不用使用make_pair,这样会快捷很多 在这里插入图片描述
  • 函数中如何传入对应的pair类型的数据
    在这里插入图片描述

新作

回文数

  • 题目链接

在这里插入图片描述

实现代码
bool isPalindrome(int x) {long  y = 0,temp = x;while(x > 0){y = y * 10 + x % 10;x /= 10;}return temp == y;}
  • 一道简单题,整的有点快,顺便看一下上次的那个自定义的转为整数的做法

字符串转整数

  • 跳转链接:字符串转整数

  • 之前写的代码有几个问题

    • 如果已经处理完了符号还有空格,就不需要再进行遍历,后续在遇到类似的情况就是终止的开始,所以没有必要将之再放到你的循环里面。
    • 使用index进行逐步遍历,完全比我现在的方法要好很多,可以更加灵活地控制,
  • 更新之后的代码是这样的

int myAtoi1(string s){int idx = 0;int res = 0;// 遍历所有的空格while(idx < s.size() && s[idx] == ' ') idx ++;if(idx == s.size()) return 0;// 遍历对应的符号int minus = 1;if(s[idx] == '-') minus = -1,idx ++;if(s[idx] == '+') {if (minus == -1)    return 0;idx ++;}// 遍历所有的数字while(idx < s.size() && s[idx] >= '0' && s[idx] <= '9'){int x = s[idx] - '0';if( res >(INT_MAX - x) - 10){if (minus == 1) return INT_MAX;else return INT_MIN;}res = res * 10 + x;idx ++;}res *= minus;return res;
}

在这里插入图片描述

  • 这样写比之前好多了,不会看起来很乱了,下次继续。

正则表达式匹配

  • 题目链接:正则表达式匹配
    在这里插入图片描述
个人实现
思路分析
  • 这个没写出来,但是也得给出自己的实现思路,面试的时候,就算写不出来,也会问你基本的实现思路。
  • 首先,这是一个字符串匹配问题,所以可以使用双指针,先把问题简化一下,仅仅只有“.”,就要保证长度是一致的,然后“.”是可以匹配任何字符的,所以遇到了"."跳过
  • 然后在增加"*",也就是说,长度可以不用相等,统计*的个数为n,然后分别作为0和0次以上重复两种情况,长度范围就是size - 2n 到目标的size
  • 然后就将问题转化为子串匹配问题:
    • 主要是集中在以*为核心的三元组字符串展开,以下4种情况,然后分段进行处理即可。
      • a*b
      • a*a
      • a*.
      • .*
实现代码如下
  • 这里写的比较挫,不过接受了,下次再改。唯一的问题是,先写一个大概,不管能拿多少分,先写一个,就算过了负向样例也是可以的,它是按照样例算分的,这个只会输出true或者false,还是很好通过样例得分的,并不是以ac为目的。
bool isMatch(string s,string p){int sx = 0,px = 0;while(sx < s.size() && px < p.size()){// 数字相同或者正则表达式中有“.”if (s[sx] == p[px] || p[px] == '.')  sx ++,px ++;else{// 遍历完是否相同,看下一个位置是否是"*"if (p[px] == '*'){// 查看上一个元素// 如果上一个元素是相同的,转换成子串匹配的问题if (s[sx - 1]== p[px - 1]){int start = px - 1;for (int i = 0; i < ; ++i) {}}else if(p[px - 1] == '.'){// 这里就是可以匹配任何不同的数据,但是有一个末尾匹配的问题}elsepx ++;}else{return false;}}}if (sx < s.size() | px < p.size() )     return false;else return true;
}
参考做法
思路分析
  • 首先,这道题的是DP解答,类似的使用DP解决的字符串问题
    • 两个字符串,求最长的公共字串
    • 两个字符串求边际距离
    • 两个字符串是否相等等等
  • 具体分析如下,这里的分析还是有点看不懂,还是看看别人的分析吧

请添加图片描述
请添加图片描述

  • 这里还是有点不懂,再好好推理一下具体的过程,具体如下
  • f(i,j)有很多匹配方式,看一下有没有合法的匹配方案数量
    请添加图片描述
实现代码
bool isMatch(string s,string p){// 简化操作int n = s.size(),m = p.size();// 将坐标置定为1开始s = ' ' + s,p = ' ' + p;// 定义状态转移方程vector<vector<bool>> f(n + 1,vector<bool>(m + 1));f[0][0] = true;  // 两个数组都为空// 双重循环遍历对应的数组for (int i = 0; i <= n; ++i) {// 这里j不能从零开始,因为i为空,j不为空的情况下,根本不可能实现for (int j = 1; j <= m; ++j) {// 单独匹配到*,直接跳过,因为※是两个字符同时使用if (j + 1 <= m && p[j + 1] == '*')  continue;// 处理状态转移方程if (i && p[j] != '*'){// 正常字符串匹配f[i][j] = f[i - 1][j - 1] && (s[i] == p[j] || p[j] == '.');}else if(p[j] == '*'){// 非正常匹配字符,可以是※的匹配f[i][j] = f[i][j - 2] || (i && f[i - 1][j] && (s[i] == p[j -1] || p[j - 1] == '.'));}}}return f[n][m];
}

总结

  • 感觉不能只刷leetcode,还是得抽时间,刷一下算法提高课,这样吧,差不多一天三道题,一道题是算法提高课里面的题目,剩下的题目就是leetcode,然后在复习一道题,差不多一天四道题。不能再多了,再多没时间学习别的了。

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

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

相关文章

力扣刷题--485. 最大连续 1 的个数【简单】

题目描述 给定一个二进制数组 nums &#xff0c; 计算其中最大连续 1 的个数。 示例 1&#xff1a; 输入&#xff1a;nums [1,1,0,1,1,1] 输出&#xff1a;3 解释&#xff1a;开头的两位和最后的三位都是连续 1 &#xff0c;所以最大连续 1 的个数是 3. 示例 2: 输入&…

WindowManager相关容器类

窗口中容器类介绍&#xff1a; 本节内容较多&#xff0c;建议结合前面的内容一起阅读&#xff1a; 1、addWindow的宏观概念 2、WindowManager#addView_1 3、WindowManager#addView_2 1&#xff09;、WindowContainer&#xff1a; class WindowContainer<E extends WindowC…

算法(一)递归

文章目录 递归的概念递归三要素递归demo打印100次“hello word”斐波那契数列 递归的概念 递归算法是一种直接或者间接调用自身函数或者方法的算法。 递归三要素 递归条件结束 因为递归是循环调用自身&#xff0c;因此就必须要有结束条件&#xff0c;或者就会OOM。 函数的功…

低代码开发系统是什么?它有那些部分组成?

低代码开发系统是什么&#xff1f;它有那些部分组成&#xff1f; 一、引言 在当今快速变化的商业环境中&#xff0c;企业对于快速响应市场需求、降低开发成本和提高开发效率的需求日益增强。低代码开发系统&#xff08;Low-Code Development Platform&#xff09;应运而生&am…

安卓启动 性能提升 20-30% ,基准配置 入门教程

1.先从官方下载demohttps://github.com/android/codelab-android-performance/archive/refs/heads/main.zip 2.先用Android studio打开里面的baseline-profiles项目 3.运行一遍app&#xff0c;这里建议用模拟器&#xff0c;&#xff08;Pixel 6 API 34&#xff09;设备运行&a…

思科防火墙 网线连接的端口还是down 已配置 端口还是down

环境&#xff1a; 思科防火墙fpr-2100 isco Firepower 2100 系列防火墙是思科系统&#xff08;Cisco Systems&#xff09;推出的一款中端网络安全和防火墙设备。这一系列的产品主要针对中到大型企业的需求&#xff0c;提供高性能的威胁防护和网络流量管理功能。 问题描述&am…

Java微服务智慧工地可视化SaaS云解决方案源码

智慧工地是指运用信息化手段&#xff0c;围绕施工过程管理&#xff0c;建立互联协同、智能生产、科学管理的施工项目信息化生态圈&#xff0c;并将此数据在虚拟现实环境下与物联网采集到的工程信息进行数据挖掘分析&#xff0c;提供过程趋势预测及专家预案&#xff0c;实现工程…

排序算法之直接选择排序【图文详解】

P. S.&#xff1a;以下代码均在VS2019环境下测试&#xff0c;不代表所有编译器均可通过。 P. S.&#xff1a;测试代码均未展示头文件stdio.h的声明&#xff0c;使用时请自行添加。 博主主页&#xff1a;LiUEEEEE                        …

基于tensorflow和NasNet的皮肤癌分类项目

数据来源 https://challenge.isic-archive.com/data/#2019 数据划分 写了个脚本划分 for line in open(ISIC/labels.csv).readlines()[1:]:split_line line.split(,)img_file split_line[0]benign_malign split_line[1]# 0.8 for train, 0.1 for test, 0.1 for validati…

快蜗牛OZON数据分析,OZON快蜗牛数据

在当今电商行业蓬勃发展的背景下&#xff0c;OZON作为俄罗斯及东欧市场的重要电商平台&#xff0c;其数据背后蕴藏着巨大的商业价值。快蜗牛&#xff0c;作为专注于OZON平台的数据分析工具&#xff0c;为卖家提供了深入的市场洞察和策略指导。接下来看看快蜗牛OZON数据分析&…

线上 | OpenSergo - [规范]

INDEX 1 参考资料2 OpenSergo 与 Sentinel 关系3 规范体系3.1 服务元数据ReportMetadataRequest 信息![在这里插入图片描述](https://img-blog.csdnimg.cn/direct/ffba569841ae4668b4cff74e4d41d21f.png)##### ReportMetadataReply 信息![在这里插入图片描述](https://img-blog…

BurpSuite2024.5

1 工具介绍 本版本更新介绍 此版本引入了Burp Scanner对WebSockets的支持、对记录登录编辑器的改进、WebSocket 匹配和替换规则以及许多性能改进。 Burp Scanner 支持 WebSockets 我们已更新内部代理的配置以允许 WebSocket 流量。这使 Burp Scanner 现在可以抓取依赖 WebSo…

基于大模型的智慧零售教育科研平台——技术方案

一、概述 1.1背景 随着数字经济的快速发展和全社会数字化水平的升级&#xff0c;人工智能的积极作用越来越凸显&#xff0c;人工智能与各个行业的深度融合已成为促进传统产业转型升级的重要方式之一。ChatGPT的出现掀起了又一波人工智能发展热潮&#xff0c;人工智能行业发展势…

Linux sudo用户权限管理小实验001

Linux sudo用户权限管理和审计-初步 1、设置历史指令的保存数量 默认history指令可以查看当前用户执行的1000条历史命令的条目 2、使用export指令设置HISTSIZE环境变量的数量为999999条。 3、基于date指令&#xff0c;输出日期和时间 4、设置linux系统history相关变量&…

预编码算法(个人总结)

引言 预编码算法是现代无线通信系统中的关键技术&#xff0c;特别是在多输入多输出&#xff08;MIMO&#xff09;系统中。它们通过在发送端对信号进行处理&#xff0c;减少干扰并提高信道容量。这种技术广泛应用于5G、Wi-Fi和卫星通信系统中。本教程将详细介绍预编码算法的背景…

FV悬浮球,安卓真正小而美的神器,满足你的一切需求。

如果你问安卓最强软件有哪些&#xff0c;不同的人可能会有不同的答案&#xff0c;但如果是问我&#xff0c;那我的答案中一定会有他。 FV悬浮球 他是ES文件浏览器&#xff0c;原作者的新作品&#xff0c;经过几年的开发&#xff0c;拥有了超过400项功能&#xff0c;但大小只有…

如何在 llama.cpp 服务器中实现用户登录功能的优化方案?(语言-c++)

&#x1f3c6;本文收录于「Bug调优」专栏&#xff0c;主要记录项目实战过程中的Bug之前因后果及提供真实有效的解决方案&#xff0c;希望能够助你一臂之力&#xff0c;帮你早日登顶实现财富自由&#x1f680;&#xff1b;同时&#xff0c;欢迎大家关注&&收藏&&…

HCIP-Datacom-ARST自选题库__BGP/MPLS IP VPN判断【10道题】

1.部署BGP/MPLSIP VPN时,当两个VPN有共同的站点,则该共同站点一定不能与两个VPN其他站点使用重叠的地址空间。 2.如图所示&#xff0c;运营商BGP/MPLSIP VPN骨干网通过LDP构建LSP&#xff0c;若想实现用户X两个站点之间通过BGP/MPLSIP VPN网络互通&#xff0c;则PE1和PE2之间必…

ZL-LGF-2离体心脏灌流系统适用于离体哺乳动物心脏灌流和离体心脏冠脉流量的测定

单介绍&#xff1a; 离体心脏灌流系统适用于离体哺乳动物心脏灌流&#xff08;langendorff氏法&#xff09;和离体心脏冠脉流量的测定&#xff0e;可直接进行恒压灌流&#xff0c;加上蠕动泵可进行恒流灌流&#xff0e; 详情介绍&#xff1a; 1、灌流数量&#xff1a;2个心脏…

10款实用软件工具推荐,从绘图到系统优化一应俱全!

AI视频生成&#xff1a;小说文案智能分镜智能识别角色和场景批量Ai绘图自动配音添加音乐一键合成视频https://aitools.jurilu.com/ 1.绘图软件——Adobe Fresco Adobe Fresco是由Adobe公司推出的一款绘图软件&#xff0c;适用于Windows平台。Adobe Fresco是一款功能强大的绘…