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…

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

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

【星戈瑞】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…

【科研】搜索文献的网站

文章目录 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一行

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

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

antdesign 1.7.8 vue2 table实现列合并

无分页&#xff0c;需要根据mac列进行列合并&#xff0c;最终效果如下所示&#xff1a; 核心实现如下&#xff1a; // 核心代码 const getRowspan (dataScroce, filed) > {let spanArr [];let position 0;dataScroce.forEach((item, index) > {if (index 0) {spanAr…

金三银四面试题(十九):MySQL中的锁

在MySQL中&#xff0c;锁是非常重要的&#xff0c;特别是在多用户并发访问数据库的环境中&#xff0c;因此也是面试中常问的话题。 请说说数据库的锁&#xff1f; 关于MySQL 的锁机制&#xff0c;可能会问很多问题&#xff0c;不过这也得看面试官在这方面的知识储备。 MySQL …

深入了解Redis——持久化

一&#xff0c;Redis持久化 Redis持久化即将内存中的数据持久化到磁盘中&#xff0c;在下一次重启后还能进行使用&#xff0c;Redis持久化分为RDB和AOF两种&#xff0c;我们接下来分别介绍RDB和AOF的内部原理和区别 RDB Redis运行时会将当前的内存快照存入至磁盘中&#xff…

./build/examples/openpose/openpose.bin在windows中调用

直接看这个更简单的方法&#xff1a;https://blog.csdn.net/weixin_45615730/article/details/137591825?spm1001.2014.3001.5501 问题描述&#xff1a; 在跑pifuhd&#xff0c;需要两个输入&#xff0c;一个图片&#xff0c;一个关键点json文件。这是人家给的例子&#xff0…

怎么开发一个预约小程序_一键预约新体验

预约小程序&#xff0c;让生活更便捷——轻松掌握未来&#xff0c;一键预约新体验 在快节奏的现代生活中&#xff0c;我们总是在不断地奔波&#xff0c;为了工作、为了生活&#xff0c;不停地忙碌着。然而&#xff0c;在这繁忙的生活中&#xff0c;我们是否曾想过如何更加高效…