备战蓝桥杯————双指针技巧巧解数组3

利用双指针技巧来解决七道与数组相关的题目。

  1. 两数之和 II - 输入有序数组: 给定一个按升序排列的数组,找到两个数使它们的和等于目标值。可以使用双指针技巧,在数组两端设置左右指针,根据两数之和与目标值的大小关系移动指针。

  2. 删除有序数组中的重复项: 给定一个有序数组,原地删除重复出现的元素,使每个元素只出现一次,并返回新的长度。利用双指针技巧,一个指针用于遍历数组,另一个指针指向新数组的末尾。

  3. 移除元素: 给定一个数组和一个值,原地移除数组中所有等于该值的元素,返回新数组的长度。同样利用双指针技巧,一个指针用于遍历数组,另一个指针用于记录非目标值的位置。

  4. 移动零: 给定一个数组,将所有的 0 移动到数组的末尾,同时保持非零元素的相对顺序。使用双指针技巧,一个指针遍历数组,另一个指针记录非零元素的位置,并将非零元素依次移到前面。

  5. 反转字符串: 反转给定的字符串。利用双指针技巧,一个指针从数组的开头向后移动,另一个指针从数组的末尾向前移动,依次交换两个指针指向的元素。

  6. 最长回文子串: 找到给定字符串中的最长回文子串。作者通过介绍中心扩散法,结合双指针技巧,在遍历过程中寻找回文子串的中心点。

  7. 删除排序链表中的重复元素: 删除排序链表中重复的元素,使得每个元素只出现一次。使用双指针技巧,一个指针遍历链表,另一个指针负责删除重复元素

一、反转字符串

题目描述

        写一个函数,其作用是将输入的字符串反转过来。输入字符串以字符数组 s 的形式给出。要给另外的数组分配额外的空间,你必须原地修改输入数组、使用 O(1) 的额外空间解决这一问题。

示例 1:

输入:s = ["h","e","l","l","o"]
输出:["o","l","l","e","h"]

示例 2:

输入:s = ["H","a","n","n","a","h"]
输出:["h","a","n","n","a","H"]

提示:

  • 1 <= s.length <= 105
  • s[i] 都是 ASCII 码表中的可打印字符

解题技巧及代码

        一般编程语言都会提供 reverse 函数,其实这个函数的原理非常简单可以利用双指针

从字符串两端开始先中间移动,依次交换字符串的每个字母即可。

class Solution {public void reverseString(char[] s) {int l=0,r=s.length-1;char temp;while(l<r){temp=s[l];s[l]=s[r];s[r]=temp;l++;r--;}}
}

结果展示

二、最长回文子串

题目描述

给你一个字符串 s,找到 s 中最长的回文子串。

如果字符串的反序与原始字符串相同,则该字符串称为回文字符串。

示例 1:

输入:s = "babad"
输出:"bab"
解释:"aba" 同样是符合题意的答案。

示例 2:

输入:s = "cbbd"
输出:"bb"

提示:

  • 1 <= s.length <= 1000
  • s 仅由数字和英文字母组成

解题思路及代码

      寻找最长回文串的问题可以通过中心扩展法解决,其中双指针技巧是关键。思路可以总结为以下步骤:

  • 对于每个字符 s[i],以其为中心,利用 Pame(s, i, i) 寻找长度为奇数的回文串。此时,中心字符即为 s[i]

  • 对于相邻字符 s[i]s[i+1],以它们为中心,利用 Pame(s, i, i+1) 寻找长度为偶数的回文串。

  • 在每次扩展中,更新最长回文串的长度和起始位置。

        这样,通过遍历字符串,以每个字符及相邻字符为中心,不断扩展找到所有可能的回文串,最终得到最长回文串的长度和起始位置。

        函数 Pame(s, l, r) 的作用是在给定字符串 s 中,以指定的左右指针 lr 为中心,向两端扩展,寻找回文串。这个函数的具体实现应该考虑到奇数长度和偶数长度的情况。

class Solution {public String longestPalindrome(String s) {String res="";for(int i=0;i<s.length();i++){String res1=Pame(s,i,i);String res2=Pame(s,i,i+1);res=res.length() > res1.length() ? res:res1;res=res.length() > res2.length() ? res:res2;}return res;}public String Pame(String s,int l,int r){while(l>=0 && r<s.length() && s.charAt(l)==s.charAt(r) ){l--;r++;}return s.substring(l+1,r);}
}

结果展示

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

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

相关文章

Python中的functools模块详解

大家好&#xff0c;我是海鸽。 函数被定义为一段代码&#xff0c;它接受参数&#xff0c;充当输入&#xff0c;执行涉及这些输入的一些处理&#xff0c;并根据处理返回一个值&#xff08;输出&#xff09;。当一个函数将另一个函数作为输入或返回另一个函数作为输出时&#xf…

mapbox初体验

mapbox 初体验 简介导入 CDN 链接创建地图实例注册 token设置地图基本属性地图显示 1. 简介 我们将使用Mapbox GL JavaScript库创建地图的 HTML 示例。Mapbox GL是一个用于构建现代 Web 地图的开源库&#xff0c;提供了丰富的地图功能和自定义性。 2. 导入 CDN 链接 首先&…

2023最新盲盒交友脱单系统源码

源码获取方式 搜一搜&#xff1a;万能工具箱合集 点击资源库直接进去获取源码即可 如果没看到就是待更新&#xff0c;会陆续更新上 或 源码软件库 最新盲盒交友脱单系统源码&#xff0c;纸条广场&#xff0c;单独抽取/连抽/同城抽取/高质量盒子 新增功能包括心动推荐&#xff…

Github 2024-02-25开源项目日报 Top10

根据Github Trendings的统计&#xff0c;今日(2024-02-25统计)共有10个项目上榜。根据开发语言中项目的数量&#xff0c;汇总情况如下&#xff1a; 开发语言项目数量Python项目5Jupyter Notebook项目2TypeScript项目2非开发语言项目1HTML项目1C项目1Dart项目1 Python - 100天…

windows安装 RabbitMQ

首先打开 RabbitMQ 官网&#xff0c;点击 Get Started(开始) 点击 Download Installation(下载安装)。 这里提供了两种方式进行安装&#xff0c;我们使用第二种方法。 使用 chocolatey以管理用户身份使用官方安装程序 往下滑&#xff0c;第二种方法需要 Erlang 的依赖&#x…

AI:136-基于深度学习的图像生成与风格迁移

🚀点击这里跳转到本专栏,可查阅专栏顶置最新的指南宝典~ 🎉🎊🎉 你的技术旅程将在这里启航! 从基础到实践,深入学习。无论你是初学者还是经验丰富的老手,对于本专栏案例和项目实践都有参考学习意义。 ✨✨✨ 每一个案例都附带关键代码,详细讲解供大家学习,希望…

pytest测试框架之插件(hook函数)开发

pytest测试框架之插件(hook函数)开发 参考文档&#xff1a; https://docs.pytest.org/en/7.1.x/how-to/writing_hook_functions.html https://juejin.cn/post/7281080420379131958 https://zhuanlan.zhihu.com/p/610804545 pytest 三种插件 pytest 给我们开放了大量的 hook …

围剿尚未终止 库迪深陷瑞幸9.9阳谋

文|智能相对论 作者|霖霖 总能被“累了困了”的打工人优先pick的咖啡&#xff0c;刚复工就顺利站上话题C位。 #瑞幸9.9元一杯活动缩水#的话题才爬上新浪微博热搜&#xff0c;“库迪咖啡河北分公司运营总监带头坑害河北联营商”的实名举报帖就出现在了小红书&#xff0c;一时…

【Oracle】玩转Oracle数据库(五):PL/SQL编程

前言 嗨&#xff0c;各位数据库达人&#xff01;准备好迎接数据库编程的新挑战了吗&#xff1f;今天我们要探索的是Oracle数据库中的神秘魔法——PL/SQL编程&#xff01;&#x1f52e;&#x1f4bb; 在这篇博文【Oracle】玩转Oracle数据库&#xff08;五&#xff09;&#xff1…

three.js第一个3D案例

在正式学习Three.js之前&#xff0c;先做一些必要的准备工作&#xff0c;具体说就是下载threejs官方文件包&#xff0c;threejs官方文件包提供了很多有用的学习资源。 threejs官方文件包所有版本&#xff1a;https://github.com/mrdoob/three.js/releases threejs文件资源目录…

vue-nextTick(nextTick---入门到离职系列)

官方定义 在下次 DOM 更新循环结束之后执行延迟回调。在修改数据之后立即使用这个方法&#xff0c;获取更新后的 DOM。 个人理解 假设我们更改了某个 dom 元素内部的文本&#xff0c;而这时候我们想直接打印这个更改之后的文本是需要 dom 更新之后才会实现的。 小案例 <tem…

踩坑:SpringBoot连接Mysql的时区报错

解决方法&#xff1a;1.修改时区2.修改连接版本 目录 1.修改时区 2.切换版本 1.修改时区 查看mysql的默认时区 SELECT global.time_zone AS Global Time Zone, session.time_zone AS Session Time Zone; 查看mysqk的默认是时区返回两个结果 Global Time Zone:表示Mysql…

高级语言期末2011级A卷

1.编写函数&#xff0c;判定正整数m和n&#xff08;均至少为2&#xff09;是否满足&#xff1a;数m为数n可分解的最小质因数&#xff08;数n可分解的最小质因数为整除n的最小质数&#xff09; 提示&#xff1a;判定m为质数且m是n的最小因数 #include <stdio.h> #include…

Jqgrid入门

最近要用Jqgrid做项目&#xff0c;之前都没怎么接触过&#xff0c;看了看官网有一个小demo&#xff0c;于是下下来后&#xff0c;发现这个demo有点问题&#xff0c;度娘了一下&#xff0c;发现有的博主直接贴官网的代码&#xff0c;截了个图&#xff0c;我真是***&#xff0c;还…

科普GAI:走进生成式人工智能的世界

今天&#xff0c;我们来聊聊一个科技界热门话题——GAI&#xff08;Generative Artificial Intelligence&#xff09;&#xff0c;也就是生成式人工智能。顾名思义&#xff0c;GAI是指那些能够自己“生”出新内容的人工智能系统&#xff0c;就像一位永不停歇的创新者&#xff0…

【网站项目】488服装店销售管理系统

&#x1f64a;作者简介&#xff1a;拥有多年开发工作经验&#xff0c;分享技术代码帮助学生学习&#xff0c;独立完成自己的项目或者毕业设计。 代码可以私聊博主获取。&#x1f339;赠送计算机毕业设计600个选题excel文件&#xff0c;帮助大学选题。赠送开题报告模板&#xff…

【Flutter/Android】运行到安卓手机上一直卡在 Running Gradle task ‘assembleDebug‘... 的终极解决办法

方法步骤简要 查看你的Flutter项目需要什么版本的 Gradle 插件&#xff1a; 下载这个插件&#xff1a; 方法一&#xff1a;浏览器输入&#xff1a;https://services.gradle.org/distributions/gradle-7.6.3-all.zip 方法二&#xff1a;去Gradle官网找对应的版本&#xff1a;h…

B树的介绍

R-B Tree 简介特性B树特性m阶B树的性质&#xff08;这些性质是B树规定的&#xff09; B树的搜索B树的添加B树的删除——非叶子结点 简介 R-B Tree又称为Red-Black Tree&#xff0c;红黑树。是一种特殊的二叉查找树&#xff0c;红黑树的每个节点上都有存储为表示结点的颜色&…

第四章:初阶试炼(三)---类和对象(下)

目录 前言&#x1f34f; 1. 再谈构造函数&#x1f34e; 1.1 构造函数体赋值 1.2 初始化列表 1.3 explicit关键字 2. Static成员&#x1f34a; 2.1 概念 2.2 特性 3. 友元&#x1f350; 3.1 友元函数 3.1.1 实现自定义类型流插入 3.1.2 实现多组流插入 3.1.3 实现自…

HC595级联原理及实例 - STM32

74HC595的最重要的功能就是&#xff1a;串行输入&#xff0c;并行输出。其次&#xff0c;74HC595里面有2个8位寄存器&#xff1a;移位寄存器、存储寄存器。74HC595的数据来源只有一个口&#xff0c;一次只能输入一个位&#xff0c;那么连续输入8次&#xff0c;就可以积攒为一个…