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

news2024/11/17 23:46:20

文章目录

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

复习

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

  • 同样类型题目链接:导弹拦截
  • 重做这道题主要是在看一遍最大上升子序列,应该怎么写?使用二维矩阵进行动态规划应该怎么写?昨天面试的时候,一维的矩阵写出来,但是二维的没整明白。
    • 校正
      • 这里搞错了,是针对那种二维迷宫的问题,是可以使用滚动数组进行优化的,但是对于这个最大上升子序列,本身的动态规划就是一维的,记错了,尴尬!!!
      • 可以使用滚动数组优化的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] == '.'){
                    // 这里就是可以匹配任何不同的数据,但是有一个末尾匹配的问题
                    
                }else
                    px ++;


            }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.coloradmin.cn/o/1721064.html

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

相关文章

docker 启动关闭,设置仓库地址

1. 配置/etc/docker/daemon.json cat /etc/docker/daemon.json# 内容 {"registry-mirrors": ["https://0nth4654.mirror.aliyuncs.com"],"insecure-registries": ["harbor.domain.io"] }2. 配置systemd启动文件 和方法1配置会有冲突&a…

HarmonyOS鸿蒙学习笔记(25)相对布局 RelativeContainer详细说明

RelativeContainer 简介 前言核心概念官方实例官方实例改造蓝色方块改造center 属性说明参考资料 前言 RelativeContainer是鸿蒙的相对布局组件&#xff0c;它的布局很灵活&#xff0c;可以很方便的控制各个子UI 组件的相对位置&#xff0c;其布局理念有点类似于android的约束…

摄影后期照片编辑工具:LrC2024 for Mac/win 中文激活版

LrC2024&#xff08;Lightroom Classic 2024&#xff09;是 Adobe 公司推出的一款专业级别的照片编辑和管理软件。它是 Lightroom Classic CC 的升级版&#xff0c;具有更多的功能和改进。 这款软件主要用于数字摄影师和摄影爱好者处理、编辑和管理他们的照片。它提供了一套强大…

【WEEK14】 【DAY4】Swagger第二部分【中文版】

2024.5.30 Thursday 接上文【WEEK14】 【DAY3】Swagger第一部分【中文版】 目录 16.4.配置扫描接口16.4.1.修改SwaggerConfig.java16.4.1.1.使用.basePackage()方法指定扫描的包路径16.4.1.2.其他扫描方式均可在RequestHandlerSelectors.class中查看源码 16.4.2.仍然是修改Swag…

java读取文件内容(正则表达式匹配)

已知文件score.txt内容如下&#xff1a; 语文85分&#xff0c;数学89分&#xff0c;英语75分&#xff0c;马列95分。 要求解析出其中的成绩数据&#xff0c;并计算总成绩 import java.io.BufferedReader; import java.io.FileReader; import java.io.IOException; import jav…

vector的功能讲解与底层实现

本文主要介绍vector的内容以及使用和模拟实现。 vector在英文翻译中是矢量的意思&#xff0c;但在c中他的本质是一个顺序表&#xff08;容器&#xff09;&#xff0c;是一个类模板&#xff0c;&#xff08;用模板创建变量就要参考我们之前的实例化内容了&#xff09;用可以改变…

云硬盘的基准性能测试场景

参考来源&#xff1a; 深入浅出云计算-05 | 云硬盘&#xff1a;云上IO到底给不给力 云硬盘的性能等级 当下的云硬盘经过了多次的软硬件迭代&#xff0c;尤其是SSD的迅速发展&#xff0c;吞吐量和随机读写能力等各项性能指标都已经不再是问题了。在现代云计算中&#xff0c;已…

解析前端开发中同源策略与配置代理

提示&#xff1a;文章写完后&#xff0c;目录可以自动生成&#xff0c;如何生成可参考右边的帮助文档 文章目录 前言一、pandas是什么&#xff1f;二、使用步骤 1.引入库2.读入数据总结 前言 在前端开发中&#xff0c;跨域请求是一个常见的问题。同源策略限制了浏览器中一个页面…

2.1Docker安装MySQL8.0

2.1 Docker安装MySQL8.0 1.拉取MySQL docker pull mysql:latest如&#xff1a;拉取MySQL8.0.33版本 docker pull mysql:8.0.332. 启动镜像 docker run -p 3307:3306 --name mysql8 -e MYSQL_ROOT_PASSWORDHgh75667% -d mysql:8.0.33-p 3307:3306 把mysql默认的3306端口映射…

字符串-至多包含K种字符的子串中最长子串(mid)

一、题目描述 二、解题思路 借鉴以下题目思想&#xff0c;使用双指针&#xff0c;外层循环右侧指针移动&#xff0c;内存循环左侧指针移动 字符串-最长不含重复字符的子字符串(mid)-CSDN博客文章浏览阅读622次&#xff0c;点赞17次&#xff0c;收藏4次。java刷题&#xff1a;…

芯盾时代API安全监测平台

面对难搞的API安全&#xff0c;芯盾时代作为领先的零信任业务安全产品方案提供商&#xff0c;给出了自己的答案——以AI技术赋能API安全&#xff0c;打造API安全监测平台&#xff0c;帮助企业建立资产摸得清、漏洞看得透、攻击测得出、数据拦得住的API风险监测体系&#xff0c;…

通过LabVIEW提升生产设备自动化水平

现代制造业对生产设备的自动化水平提出了越来越高的要求。使用LabVIEW这一强大的图形化编程环境&#xff0c;可以显著提升生产设备的自动化程度&#xff0c;改善生产效率和产品质量。本文将详细分析如何通过LabVIEW改善生产设备的自动化水平&#xff0c;并提供具体的实施策略与…

c++函数基础总结

在给出的代码片段中&#xff0c;我们看到两部分内容&#xff1a;一个类定义和一个全局函数声明。让我们逐一分析它们&#xff1a; 类定义&#xff1a; cpp复制代码 class { public: void a(); }; 这个类定义是不完整的&#xff0c;因为它没有类名。但为了说明&#xff0c;我…

【SQL学习进阶】从入门到高级应用【三范式】

文章目录 什么是数据库设计三范式三范式一对多怎么设计多对多怎么设计一对一怎么设计最终的设计 &#x1f308;你好呀&#xff01;我是 山顶风景独好 &#x1f495;欢迎来到我的博客&#xff0c;很高兴能够在这里和您见面&#xff01; &#x1f495;希望您在这里可以感受到一份…

【SpringBoot】SpringBoot整合JWT

目录 先说token单点登录&#xff08;SSO&#xff09;简介原理单点登录的优势单点登录流程分布式单点登录方式方式一&#xff1a;session广播机制实现方式二&#xff1a;使用cookieredis实现。方式三&#xff1a;token认证 JWT数字签名JWT的作用JWT和传统Session1、无状态&#…

精雕细琢,B 端 UI 设计展典雅风范

精雕细琢&#xff0c;B 端 UI 设计展典雅风范

virtualbox中ubuntu22.04网络配置

第一&#xff1a;添加两个网卡&#xff0c;网卡1是NAT方式&#xff0c;网卡2是仅主机模式&#xff08;两个顺序不能颠倒&#xff09; 第二步&#xff1a;启动ifconfig查看网络

LabVIEW车体静强度试验台测控系统

LabVIEW车体静强度试验台测控系统 开发了一种基于LabVIEW的车体静强度试验台测控系统&#xff0c;通过自动化技术提高试验的精度和效率。系统采用LabVIEW软件与S7-200 SMART PLC硬件平台相结合&#xff0c;实现了对液压缸作用力的精确控制和试验数据的实时采集及管理。 传统的…

11.1 排序算法

目录 11.1 排序算法 11.1.1 评价维度 11.1.2 理想排序算法 11.1 排序算法 排序算法&#xff08;sorting algorithm&#xff09;用于对一组数据按照特定顺序进行排列。排序算法有着广泛的应用&#xff0c;因为有序数据通常能够被更高效地查找、分析和处理。 如图 1…

MySQL事务与MVCC

文章目录 事务和事务的隔离级别1.为什么需要事务2.事务特性1_原子性&#xff08;atomicity&#xff09;2_一致性&#xff08;consistency&#xff09;3_持久性&#xff08;durability&#xff09;4_隔离性&#xff08;isolation&#xff09; 3.事务并发引发的问题1_脏读2_不可重…