秋招突击——算法打卡——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] == '.'){
                    // 这里就是可以匹配任何不同的数据,但是有一个末尾匹配的问题
                    
                }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,然后在复习一道题,差不多一天四道题。不能再多了,再多没时间学习别的了。

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

安卓 Flutter Channel 源码解析

Flutter 官方提供三种 Platform 与 Dart 端消息通信方式&#xff0c;他们分别是 MethodChannel 、 BasicMessageChannel 、 EventChannel MethodChanel &#xff1a;用于传递方法调用&#xff0c; MethodCallHandler 最终必须在 UI 线程通过 result. success(x) 方法返回…

【基础算法总结】位运算

位运算 1.基础位运算2.常见用法总结3.面试题 01.01. 判定字符是否唯一4.丢失的数字5.两整数之和6.只出现一次的数字 II7.面试题 17.19. 消失的两个数字 点赞&#x1f44d;&#x1f44d;收藏&#x1f31f;&#x1f31f;关注&#x1f496;&#x1f496; 你的支持是对我最大的鼓励…

基于物理的分析模型,用于具有场板结构的GaN HEMT的输入、输出及反向电容

Physics-Based Analytical Model for Input, Output, and Reverse Capacitance of a GaN HEMT With the Field-Plate Structure&#xff08;TPE 17年&#xff09; 摘要 该论文提出了一种分析模型&#xff0c;用于描述带有场板结构的常开型AlGaN/GaN高电子迁移率晶体管&#x…

无意间看到男主眼神,这也太有感觉了吧❗❗

2025即将首播《藏海传》中国大陆剧情/奇幻/古装共40集。 原本&#xff0c;稚奴身为大雍国钦天监监正蒯铎之子&#xff0c;背负着家族血仇。 历经十年沉默与磨砺&#xff0c;他化名为藏海&#xff08;肖战 饰&#xff09;&#xff0c;重返京城。 他凭借卓越的营造技艺和深谙纵…

深入探讨 Android 的 View 显示过程与源码分析

文章目录 1. 探讨 Android 的 View 显示过程1.1. onFinishInflate1.2. onAttachedToWindow1.3. onMeasure1.4. onSizeChanged1.5. onLayout1.6. onDraw 2. 系统代码分析1.1. onFinishInflate1.2. onAttachedToWindow1.3. onMeasure1.4. onSizeChanged1.5. onLayout1.6. onDraw …

Python网页处理与爬虫实战:使用Requests库进行网页数据抓取

✨✨ 欢迎大家来访Srlua的博文&#xff08;づ&#xffe3;3&#xffe3;&#xff09;づ╭❤&#xff5e;✨✨ &#x1f31f;&#x1f31f; 欢迎各位亲爱的读者&#xff0c;感谢你们抽出宝贵的时间来阅读我的文章。 我是Srlua小谢&#xff0c;在这里我会分享我的知识和经验。&am…

LDR6328Q:重塑Type-C接口取电体验的新星

在当今日益发展的电子设备市场中&#xff0c;快速、高效的电源管理成为了众多厂商和消费者关注的焦点。LDR6328Q作为一款专为设备端设计的Type-C接口取电芯片&#xff0c;凭借其独特的功能和优势&#xff0c;正在逐步改变我们的电源管理方式。 一、LDR6328Q的核心特点 多协议…

高磷废酸除铝除铁再生技术的实际应用

在化工和金属加工行业中&#xff0c;高磷废酸的处理和再生是一个重要的环保和经济效益问题。废酸中通常含有铝、铁等杂质&#xff0c;这些杂质不仅影响废酸的再利用价值&#xff0c;还可能对环境造成污染。因此&#xff0c;开发高效的高磷废酸除铝除铁再生技术具有重要的实际意…

[排序算法]插入排序+希尔排序全梳理!

目录 1.排序是什么&#xff1f;1.1排序的概念1.2排序运用1.3常见的排序算法 2.插入排序分类3.直接插入排序基本思想具体步骤&#xff1a;动图演示代码实现直接插入排序的特性总结&#xff1a; 4. 希尔排序基本思想具体步骤动图演示代码实现希尔排序的特性总结&#xff1a; 5.总…

阿里云CDN流量被盗刷或CC攻击会怎么样?

最近&#xff0c;一位使用了阿里云CDN的站长向主机吧反应&#xff0c;其域名使用的阿里云CDN不知道是因为被盗刷还是被CC攻击&#xff0c;导致不仅原本帐号上的3T流量包用完了&#xff0c;连帐户也欠了几百元的流量费。 而产生这么多流量的只是晚上睡一觉起来&#xff0c;手机…

全志H616 通过Cedrus和v4l2_request API实现硬件编解码加速(香橙派zero2)

编译安装或加载cedrus驱动模块&#xff0c;加载v4l2-mem2mem Sunxi-Cedrus 致力于为全志 SoC 提供硬件加速的视频解码和编码支持&#xff0c;并将其引入主线 Linux 内核。此外&#xff0c;还为典型的基于 GNU/Linux 的系统提供了与内核驱动程序接口的其他用户空间组件。 Sunx…

调节效应多元统计回归

什么是调节效应&#xff0c;给个例子说明一下: 背景 假设我们有一个国家的经济数据&#xff0c;我们希望研究产业数字化是否调节了环境规制对产业结构调整的影响。 步骤 1. 假设检验 原假设 (H0)&#xff1a; 产业数字化对环境规制与产业结构调整之间的关系没有调节作用。…

浏览器提示413 Request Entity Too Large

1 问题 2 解决 2.1 后端java配置 2.2 Nginx配置

【Git篇 二】idea中使用git合并分支(拉取分支)

idea中使用git合并分支 前言idea使用git合并分支1) 将主分支&#xff08;master&#xff09;更新到自己的分支&#xff08;dev&#xff09;① checkout到自己分支② 目标分支&#xff08;dev&#xff09;更新到当前分支&#xff08;dev_KC240524&#xff09;③ 当前分支出现“绿…

提升B端图表设计技能:教程分享

图表是数据可视化的常用表现形式&#xff0c;是对数据的二次加工&#xff0c;可以帮助我们理解数据、洞悉数据背后的真相&#xff0c;让我们更好地适应这个数据驱动的世界。本期就来带大家学习图表的设计及构成&#xff0c;帮助大家更好的理解图表设计。 设计教程源文件http:/…

Keras深度学习框架实战(1):图像分类识别

1、绪论 1.1 图像分类的定义 图像分类是计算机视觉领域中的一项基本任务&#xff0c;其定义是将输入图像分配给预定义类别中的一个或多个。具体来说&#xff0c;图像分类系统接受一个图像作为输入&#xff0c;并输出一个或多个类别标签&#xff0c;这些标签描述了图像中的内容…

华为设备RIP基础路由实验

华为设备RIP基础路由实验 实验拓扑&#xff1a; RIP&#xff1a;距离矢量的动态路由&#xff0c;路由通信有方向&#xff0c;度量值metric取值范围&#xff08;1-16&#xff09;16表示目标主机不可达。 路由的版本分为&#xff1a;RIPV1&#xff08;广播通信目标地址是255.255…

Mysql树形结构递归查询

Mysql树形结构递归查询 1.表的基础数据2.基础查询语句3.Mysql8递归查询 1.表的基础数据 类似于这种三级目录&#xff1a; – 1&#xff1a;根结点 – 1-1至1-11 – 1-1-1 至1-1-10 2.基础查询语句 可以使用内联查询inner join去查询&#xff1a; SELECTone.id o…

如何做好流程优化?看这里的目的、原则和方法

流程管理的本质是通过构造卓越的业务流程让流程增值&#xff0c;为客户创造真正的价值。 但卓越的业务流程并不是一蹴而就的&#xff0c;有一个过程&#xff0c;这个过程就是业务流程和流程管理体系不断优化提升的过程&#xff08;可以参照流程成熟度评价模型&#xff09;。 …

React组件通信——兄弟组件

兄弟组件通信 方法一&#xff1a;状态提升 子组件先将数据传递到父组件&#xff0c;父组件再把数据传到另一个子组件中。 import { useState } from "react"; // 定义A组件&#xff0c;向B组件发送数据 function A({ onGetMsg }) {const name "this is A na…