LeetCode算法——双指针篇

宫侑的发球最终进化为三刀流,那么我的题解也未必要循规蹈矩!


1、验证回文串

题目描述:

解法:

        这题官方给的关于双指针的题解都用到了多个库函数,如 tolower(大写字母转小写)、isalnum(判断一个字符是否是 字母 或者 十进制数字 )

        我想避免使用库函数,所有就不用双指针的做法了,而是使用

        思路很简单:

                1、先将字符串中所有字母统一为小写字母

                2、将数字和小写字母入栈,同时将完整的、连续的字符都加入到一个新字符串newS中

                3、再使用一个新字符串stkPop接收栈每一次pop出的字符

                4、比较 newS 和 stkPop 是否相等

        这道题的描述中提到了“字母和数字都属于字母数字字符”,但示例中没有给出串中包含数字的情况,导致测试用例 '0P' 没有通过,这也是因为我忽略了串中还有数字的情况

        要点:

                1、对于大写字母,在 ASCII 码的基础上 +32 就能转为小写字母

                2、栈从top位置开始pop,每次pop后栈中的元素会被删除

class Solution {
public:bool isPalindrome(string s) {stack <char> stk;string newS;string stkPop;  // 接收栈中所有字符pop后的结果if(s.size() <= 1) return true;for(int i = 0; i < s.size(); ++i){if(s[i] >= 'A' && s[i] <= 'Z'){s[i] += 32;  // 先将串中所有大写字母转为小写}// 只将串中的字母和数字入栈if((s[i] >= 'a' && s[i] <= 'z') || (s[i] >= '0' && s[i] <= '9')){stk.push(s[i]); newS += s[i];}}while(!stk.empty()){stkPop += stk.top();stk.pop();}return stkPop == newS;}
};

2、判断子序列

题目描述:

解法:

        看到这种题,第一反应就是2个 for 循环,这种想法很不好

    思路:       

        为串 s 的首字符设置一个指针,同理为串 t 的首字符也设置一个指针

        我们是要在 t 中找出和 s 可以匹配上的子串,当两个串中匹配上了同一个字符时,两个指针都向后走一步,以便进行下一个字符的匹配

        若 s 的第2个字符与 t 的第2个字符没有匹配上,此时指向 s 的指针不动,指向 t 的指针继续向后移动,直到找到匹配项

        当 s 的指针走完整个 s 串时,表示在 t 中有可以匹配上的子序列,而 s 的指针没有走完 s 串时,则没有匹配成功

class Solution {
public:bool isSubsequence(string s, string t) {// 指向字符串s、t首字符的指针int i = 0, j = 0;if(s.size() == 0) return true;for(i, j; j < t.size(); ++j){if(s[i] == t[j]){i++;  // 匹配上了, i 和 j同走,没匹配上,只有 j 往后走if(i == s.size()) return true;}}return false;}
};

3、两数之和Ⅱ-输入有序数组

题目描述:

解法:

        被题目描述中的“给你一个下标从1开始的整数数组”迷惑了,一开始设定的指针是

int i = 1;

int j = numbers.size();

        哈哈哈哈果然溢出了,不论何种描述,数组容器的下标在计算机世界里永远是从0开始的

        最终根据题目要求返回 {i + 1, j + 1} 就好了

        之前只知道python中单个函数可以返回多个值,还在想C++怎么返回两个下标值呢?刚开始甚至还定义了另一个 vector<int> res 来接收下标,最终看了题解后发现了 return  {i + 1, j + 1} 这种写法

class Solution {
public:vector<int> twoSum(vector<int>& numbers, int target) {int i = 0;  // 首指针int j = numbers.size() - 1;  // 尾指针for(i, j; i < numbers.size(), j >= 0;){if((numbers[i] + numbers[j]) > target){j--;  // 两数之和大于目标,尾指针向前走}else if((numbers[i] + numbers[j]) < target){i++;}else{if((numbers[i] + numbers[j]) == target) return {i + 1, j + 1};}}return {-1, -1};}
};

4、盛水最多的容器

题目描述:

        官方写的垂线、端点之类的术语属实费脑子,推荐大家去看K神的题解——(传送门)

解法:

        实际上求解的正是矩形面积,规定好  i < j 后,唯一要做的就是判断 i 和 j 代表的槽板哪个高哪个低,因为较小的一方才能盛水而不漏

        每次移动槽板较低的一方(此处可能用到了贪心的思想),通过不断比较原来面积和新面积的大小来返回最终的最大面积。

class Solution {
public:int maxArea(vector<int>& height) {int res = 0;int i = 0;int j = height.size() - 1;while(i < j){// 指针指向的水槽板高度分别为 h[i], h[j],两者中小的一方决定容纳面积res = max(res, (min(height[i], height[j]) * (j - i)));if(height[i] < height[j]) i++;else j--;}return res;}
};

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

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

相关文章

LeetCode——622设计循环队列

. - 力扣&#xff08;LeetCode&#xff09;. - 备战技术面试&#xff1f;力扣提供海量技术面试资源&#xff0c;帮助你高效提升编程技能,轻松拿下世界 IT 名企 Dream Offer。https://leetcode.cn/problems/design-circular-queue/ 1.题目 设计你的循环队列实现。 循环队列是一…

CSS-文字环绕浮动、行内块分页、三角强化妙用、伪元素选择器

文字环绕浮动 <!DOCTYPE html> <html lang"en"><head><meta charset"UTF-8"><meta name"viewport" content"widthdevice-width, initial-scale1.0"><title>文字环绕浮动效果</title><s…

Vue+el-table 修改表格 单元格横线边框颜色及表格空数据时边框颜色

需求 目前 找到对应的css样式进行修改 修改后 css样式 >>>.el-table th.el-table__cell.is-leaf {border-bottom: 1px solid #444B5F !important;}>>>.el-table td.el-table__cell,.el-table th.el-table__cell.is-leaf {border-bottom: 1px solid #444B5F …

Oracle ORA-28547:connection to server failed,probable Oracle Net admin error

使用Navicat连接oracle数据库时报ORA-28547错误 因为Navicat自带的oci.dll并不支持oracle11g&#xff0c;需要去官网下载支持的版本。 1.去oracle下载对应的oci.dll文件 下载地址&#xff1a;Oracle Instant Client Downloads 可以用 11.2.0.4 2. 复制刚下载下来的instant…

【智能算法】小龙虾优化算法(COA)原理及实现

目录 1.背景2.算法原理2.1算法思想2.2算法过程 3.结果展示4.参考文献 1.背景 2023年&#xff0c;Jia等人受到自然界小龙虾社会行为启发&#xff0c;提出了小龙虾优化算法&#xff08;Crayfsh Optimization Algorithm, COA&#xff09;。 2.算法原理 2.1算法思想 COA基于小龙…

计算机网络-TCP连接建立阶段错误应对机制

错误现象 丢包 网络问题&#xff1a;网络不稳定可能导致丢包&#xff0c;例如信号弱或干扰强。带宽限制可能导致路由器或交换机丢弃包&#xff0c;尤其是在高流量时段。网络拥塞时&#xff0c;多个数据流竞争有限的资源&#xff0c;也可能导致丢包。缓冲区溢出&#xff1a;TC…

网络安全之代码签名证书申请

代码签名&#xff0c;作为一种数字安全机制&#xff0c;对于软件开发、分发及用户使用环节具有至关重要的意义。以下从六大方面阐述代码签名必不可少的重要性&#xff1a; 确保代码来源可信&#xff1a; 代码签名如同软件的“身份证”&#xff0c;通过数字证书对开发者身份进…

微信被拉黑删除的提示差异和检测方法

拉黑 被拉黑的提示是“消息已发出&#xff0c;但被对方拒收了”。 拉黑方能发消息且被拉黑方能接到&#xff0c;被拉黑的人无法发送成功&#xff0c;并灰色字提示。 删除 仅删除的时候&#xff0c;才能发送消息时不是提示拒收&#xff0c;可“发送朋友验证”添加&#xff0…

推荐两个可以直接使用的ChatGPT 开源应用

freegpt35, FreeAskInternet 无需注册账号即可使用。 FreeAskInternet https://github.com/nashsu/FreeAskInternet git clone https://github.com/nashsu/FreeAskInternet.git cd ./FreeAskInternet docker-compose up -dfreegpt35 https://github.com/missuo/FreeGPT35 …

Android开发环境部署Windows环境变量

JAVA_HOME C:\Program Files\Java\jdk-17 Path 里增加%JAVA_HOME%\bin; %JAVA_HOME%\jre\bin CLATHPATH .;%JAVA_HOME%\lib\dt.jar;%JAVA_HOME%\lib\tools.jar

头歌-机器学习 第11次实验 softmax回归

第1关&#xff1a;softmax回归原理 任务描述 本关任务&#xff1a;使用Python实现softmax函数。 相关知识 为了完成本关任务&#xff0c;你需要掌握&#xff1a;1.softmax回归原理&#xff0c;2.softmax函数。 softmax回归原理 与逻辑回归一样&#xff0c;softmax回归同样…

Python的re模块

re模块中的常用方法 Python中的正则表达式处理模块是re,re模块比较简单,包括以下几个方法: 查找 re.search():查找符合模式的字符,只返回第一个匹配到的,返回Match对象,匹配不到返回None re.match():和search一样,但要求必须从字符串开头匹配 re.findall():返回所有…

【星戈瑞】DBCO-NH2在生物成像技术中的应用

DBCO-NH2作为一种生物标记分子&#xff0c;在生物成像技术中发挥诸多应用作用。其点击化学反应特性使得它能够在生物体内进行特异的标记&#xff0c;从而为生物医学研究提供工具。 在生物成像技术中&#xff0c;DBCO-NH2常被用于标记生物分子&#xff0c;如蛋白质、核酸等。通…

Android 9.0 framework层实现app默认全屏显示

1.前言 在9.0的系统rom产品定制化开发中,在对于第三方app全屏显示的功能需求开发中,需要默认app全屏显示,针对这一个要求,就需要在系统启动app 的过程中,在绘制app阶段就设置全屏属性,接下来就实现这个功能 效果图如下: 2.framework层实现app默认全屏显示的核心类 fram…

Recommended Books:《Pride and Prejudice》

Recommended Books&#xff1a;《Pride and Prejudice》 Author Introduction: Jane Austen, born on December 16, 1775, in Steventon, England, is one of the most renowned English novelists of all time. Her works, including “Pride and Prejudice,” are known for…

【科研】搜索文献的网站

文章目录 paperswithcode【最新论文&#xff0c;代码】huggingface【大语言模型&#xff0c;最新论文】dblp【关键词搜索】arxiv【最新文章】semanticscholar【相关引用查询】connectedpapers【相关引用查询】github【工程&#xff0c;代码&#xff0c;论文开源代码】 paperswi…

mmdetection模型使用mmdeploy部署在windows上的c++部署流程【详细全面版】

0. 前置说明: 该文档适用于:已经使用mmdetection训练好了模型,并且完成了模型转换。要进行模型部署了。 1. 概述 MMDeploy 定义的模型部署流程,如下图所示: 模型转换【待撰写,敬请期待…】 主要功能是:把输入的模型格式,转换为目标设备的推理引擎所要求的模型格式…

andorid 矢量图fillColor设置无效

问题&#xff1a;andorid 矢量图fillColor设置无效 解决&#xff1a;去掉如下 android:tint一行

零基础考24上软考高级要备考多久呢?

对于零基础考软考高级的考生来说&#xff0c;备考时间是一个关键问题。 软考高级是国家信息技术行业的专业资格认证&#xff0c;对考生的能力要求较高&#xff0c;因此需要一定的备考时间来充分准备。那么&#xff0c;针对零基础考软考高级的考生&#xff0c;需要备考多久呢&a…

Ansys Zemax | 如何将光栅数据从Lumerical导入至OpticStudio(下)

附件下载 联系工作人员获取附件 本文介绍了一种使用Ansys Zemax OpticStudio和Lumerical RCWA在整个光学系统中精确仿真1D/2D光栅的静态工作流程。将首先简要介绍方法。然后解释有关如何建立系统的详细信息。 本篇内容将分为上下两部分&#xff0c;上部将首先简要介绍方法工作…