秋招突击——算法打卡——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.rhkb.cn/news/340785.html

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

相关文章

vue+vscode 快速搭建运行调试环境与发布

1.安装node.js Node.js — Run JavaScript Everywhere 默认不断next 2.更换镜像地址 运行-cmd 执行以下代码安装 npm config set registry https://registry.npmmirror.com 检查node.js和镜像是否是否成功 node -v npm -v npm config get registry 3.安装打包工具 …

echarts学习:基本使用和组件封装

前言 我在工作中使用echarts较少&#xff0c;这就导致每次使用时都要从头再来&#xff0c;这让我很头疼。因此我决心编写一系列文章将我参与工作后几次使用echarts所用到的知识记录下来&#xff0c;以便将来可以快速查阅。 一、基本使用 像我一样的新手&#xff0c;想要入门e…

.NET IoC 容器(三)Autofac

目录 .NET IoC 容器&#xff08;三&#xff09;AutofacAutofacNuget 安装实现DI定义接口定义实现类依赖注入 注入方式构造函数注入 | 属性注入 | 方法注入注入实现 接口注册重复注册指定参数注册 生命周期默认生命周期单例生命周期每个周期范围一个生命周期 依赖配置Nuget配置文…

新手教程之使用LLaMa-Factory微调LLaMa3

文章目录 为什么要用LLaMa-Factory什么是LLaMa-FactoryLLaMa-Factory环境搭建微调LLaMA3参考博文 为什么要用LLaMa-Factory 如果你尝试过微调大模型&#xff0c;你就会知道&#xff0c;大模型的环境配置是非常繁琐的&#xff0c;需要安装大量的第三方库和依赖&#xff0c;甚至…

英伟达GPU架构加速狂飙

NVIDIA首席执行官黄仁勋在台湾大学体育馆发表主题演讲&#xff0c;展示了新一代Rubin架构&#xff0c;这是NVIDIA加速推出新架构的最新成果。 在讨论NVIDIA下一代架构时&#xff0c;黄仁勋提到了Blackwell Ultra GPU&#xff0c;并表示它可能会继续升级。然后他透露&#xff0c…

Unity 之 Android 【获取设备的序列号 (Serial Number)/Android_ID】功能的简单封装

Unity 之 Android 【获取设备的序列号 (Serial Number)/Android_ID】功能的简单封装 目录 Unity 之 Android 【获取设备的序列号 (Serial Number)/Android_ID】功能的简单封装 一、简单介绍 二、获取设备的序列号 (Serial Number) 实现原理 1、Android 2、 Unity 三、注意…

蓝牙网关和蓝牙mesh网关的对比

蓝牙网关和蓝牙Mesh网关是物联网&#xff08;IoT&#xff09;领域中两种重要的设备&#xff0c;它们各自有不同的特点和应用场景。以下是它们的一些主要对比和区别 1. 网络结构&#xff1a; - 蓝牙网关&#xff1a;通常采用点对点或星型拓扑结构&#xff0c;一个网关连接多个…

Scikit-Learn 基础教程

目录 &#x1f40b;Scikit-Learn 基础教程 &#x1f40b;Scikit-Learn 简介 &#x1f40b; 数据预处理 &#x1f988;数据集导入 &#x1f988;数据清洗 &#x1f988;特征选择 &#x1f988;特征标准化 &#x1f40b; 模型选择 &#x1f988;分类模型 &#x1f988;回…

npm install 出错,‘proxy‘ config is set properly. See: ‘npm help config‘

背景 从远程clone下项目之后&#xff0c;使用命令 npm install 安装依赖&#xff0c;报错如下 意为&#xff1a; 报错&#xff1a; npm犯错!network与网络连通性有关的问题。 npm犯错!网络在大多数情况下&#xff0c;你背后的代理或有坏的网络设置。 npm犯错!网络 npm犯错…

React - 实现走马灯组件

一、实现效果 二、源码分析 import {useRef, useState} from "react";export const Carousel () > {const images [{id: 3, url: https://sslstage3.sephorastatic.cn/products/2/4/6/8/1/6/1_n_new03504_100x100.jpg}, {id: 1, url: https://sslstage2.sephor…

10-Django项目--Ajax请求

目录 Ajax请求 简单示范 html 数据添加 py文件 html文件 demo_list.html Ajax_data.py 图例 Ajax请求 简单示范 html <input type"button" id"button-one" class"btn btn-success" value"点我"> ​ ​ <script>/…

模板进阶

非类型模板参数&#xff08;常量参数&#xff09; 相当于向类传递常量&#xff08;编译前确定&#xff09;参数 只能传整型/size_t&#xff0c;不可double等 C20 后可以支持其他内置类型&#xff08;可指针&#xff09; 自定义类型的实参永远不行 array 可理解为固定size的…

10倍速提升音乐制作,FL Studio21.2.9中文版揭秘!

FL Studio21中文版是数字音频工作站软件领域的一颗璀璨明星&#xff0c;它以强大的功能和直观的操作界面&#xff0c;赢得了音乐制作人和爱好者的广泛青睐。无论是专业音乐人还是初学者&#xff0c;都能通过这款软件探索和实现他们对音乐的创作和想象。本文将详细介绍FL Studio…

Ubuntu24.04 LTS安装中文输入法

前言 最近&#xff0c;windows玩没了&#xff0c;一怒之下决定换一个操作系统&#xff0c;当然就是最新的Ubuntu24.04 LTS.&#xff0c;其中魔法和咒语&#xff08;汉语&#xff09;是inux遇到的第一大难关&#xff0c;我权限不够教不了魔法&#xff0c;但我可以教你咒语(๑•…

Pycharm 添加内容根

解决问题&#xff1a;包未能被正常引入时

LeetCode746使用最小花费爬楼梯

题目描述 给你一个整数数组 cost &#xff0c;其中 cost[i] 是从楼梯第 i 个台阶向上爬需要支付的费用。一旦你支付此费用&#xff0c;即可选择向上爬一个或者两个台阶。你可以选择从下标为 0 或下标为 1 的台阶开始爬楼梯。请你计算并返回达到楼梯顶部的最低花费。 解析 动态…

JVM运行数据区-Java堆

Java堆 堆区&#xff08;Heap区&#xff09;是JVM运行时数据区占用内存最大的一块区域&#xff0c;每一个JVM进程只存在一个堆区&#xff0c;它在JVM启动时被创建&#xff0c;JVM规范中规定堆区可以是物理上不连续的内存&#xff0c;但必须是逻辑上连续的内存。 1、堆区是线程…

R语言探索与分析17-CPI的分析和研究

一、选题背景 CPI&#xff08;居民消费价格指数&#xff09;作为一个重要的宏观经济指标&#xff0c;扮演着评估通货膨胀和居民生活水平的关键角色。在湖北省这个经济活跃的地区&#xff0c;CPI的波动对于居民生活、企业经营以及政府宏观经济政策制定都具有重要的影响。因此&a…

【MATLAB】概述1

非 ~ 注释 % 定义 >> 数组 赋值 赋值&#xff1a;>> x1 函数 数组 x[x1,x2] 行向量&#xff08;&#xff0c;or ) x[x1;x2] 列向量 x. 转置等间隔向量 1-10 向量&#xff1a;>>xlinspace(1,10,10) 矩阵 矩阵&#xff1a;>>A[1,2,3;4,5,6;7,8,9] …

容器中运行ip addr提示bash: ip: command not found【笔记】

容器中运行ip addr提示bash: ip: command not found 原因没有安装ip命令。 rootdocker-desktop:/# ip addr bash: ip: command not found rootdocker-desktop:/# apt-get install -y iproute2