当前位置: 首页 > news >正文

验证回文串,x的平方根(左右指针)

这个题用暴力法会超时,使用左右指针。

首先考虑如果不允许删除字符,如何判断一个字符串是否是回文串。常见的做法是使用双指针。定义左右指针,初始时分别指向字符串的第一个字符和最后一个字符,每次判断左右指针指向的字符是否相同,如果不相同,则不是回文串;如果相同,则将左右指针都往中间移动一位,直到左右指针相遇,则字符串是回文串。

在允许最多删除一个字符的情况下,同样可以使用双指针,通过贪心实现。初始化两个指针 low 和 high 分别指向字符串的第一个字符和最后一个字符。每次判断两个指针指向的字符是否相同,如果相同,则更新指针,将 low 加 1,high 减 1,然后判断更新后的指针范围内的子串是否是回文字符串。如果两个指针指向的字符不同,则两个字符中必须有一个被删除,此时我们就分成两种情况:即删除左指针对应的字符,留下子串 s[low+1:high],或者删除右指针对应的字符,留下子串 s[low:high−1]。当这两个子串中至少有一个是回文串时,就说明原始字符串删除一个字符之后就以成为回文串。

class Solution { public: bool Isover(string& s,int left, int right){ while(left<right){ if(s[left]!=s[right]){ return false; } else{ left++; right--; } } return true; } bool validPalindrome(string s) { int left=0; int right=s.size()-1; while(left<right){ if(s[left]!=s[right]){ return Isover(s,left+1,right) || Isover(s,left,right-1); } else{ left++; right--; } } return true; } };

由于 x 平方根的整数部分 ans 是满足 k^2 ≤x 的最大 k 值,因此我们可以对 k 进行二分查找,从而得到答案。

二分查找的下界为 0,上界可以粗略地设定为 x。在二分查找的每一步中,我们只需要比较中间元素 mid 的平方与 x 的大小关系,并通过比较的结果调整上下界的范围。由于我们所有的运算都是整数运算,不会存在误差,因此在得到最终的答案 ans 后,也就不需要再去尝试 ans+1 了。

class Solution { public: int mySqrt(int x) { int left=0; int right=x; int ans=-1; while(left<=right){ int mid=left+(right-left)/2; if((long long) mid* mid>x) right=mid-1; else{ ans =mid; left=mid+1; } } return ans; } };

比较值得一说的地方就是两个数left+right存在超范围的可能,这里使用了一个技巧:

为了避免left + right直接相加导致整数溢出,使用left + (right - left) / 2来计算中点,这是二分查找的安全写法。(right - left)一定 ≤INT_MAX

http://www.jsqmd.com/news/135561/

相关文章:

  • ant design pro不安装第三方库,如何实现多标签页面(带源码)
  • 实用指南:Java Spring Boot结合Elasticsearch高性能搜索服务设计与实战经验分享:广州电商商品智能搜索落地
  • 【课程设计/毕业设计】基于SpringBoot的救援指挥系统基于springboot的户外救援系统【附源码、数据库、万字文档】
  • 基于Springboot+Vue的社区老年医疗服务系统设计与实现
  • 《深度学习》CUDA安装配置、pytorch库、torchvision库、torchaudio库安装
  • WiseAgent智能体框架实战之CrewAI篇(四) - 优化智能体的问答能力与记忆系统
  • 建议收藏!2025最新论文降AI率保姆级攻略,学生党必看。
  • Hadoop - 资源调度器YARN和计算引擎MapReduce/Tez/Spark之间是什么关系?
  • 【计算机毕业设计案例】基于Springboot+Vue党员教育和管理系统基于springboot的高校党员信息管理系统(程序+文档+讲解+定制)
  • 基于深度学习的蘑菇种类识别系统的设计与实现(源代码+文档+PPT+调试+讲解)
  • Anthropic 开源 Bloom:基于 LLM 的自动化行为评估框架
  • 超越RLVR陷阱:从设计“奖励契约”到构建“AI宪法”的架构思想
  • Linux:awk升级到5.0.3最新版本(源码编译升级方式)
  • 基于深度学习的淘宝用户购物可视化与行为预测系统设计(源代码+文档+PPT+调试+讲解)
  • 2025最新!10个AI论文网站测评:本科生写论文救星大公开
  • ModelEngine AI Agent通过Nexent 是一个开源智能体SDK和平台打造全能搜索助手
  • 计算机Java毕设实战-基于springBool+Vue小吃美食分享平台的设计与实现【完整源码+LW+部署说明+演示视频,全bao一条龙等】
  • 长亭推出工程级AI开发平台MonkeyCode,开启AI工程级开发新模式
  • 【计算机毕业设计案例】vue和springboot框架开发的户外救援系统基于springboot的户外救援系统(程序+文档+讲解+定制)
  • 基于深度学习的图书推荐系统(源代码+文档+PPT+调试+讲解)
  • 6-10 WPS JS宏 映射应用
  • 完整教程:学算法总换设备?Hello-Algo+cpolar 让学习进度随身带
  • 敏捷咨询:从落地到深耕的全流程赋能之路
  • XML DOM
  • 基于SpringBoot的社区诊所在线挂号与排队应用系统毕业设计项目源码
  • Redis 集群模式Redis Cluster
  • AngularJS 模块
  • 完整教程:50天精通FPGA设计-总体规划
  • Java毕设项目推荐-基于springboot的实验室实验报告管理系统的设计与实现基于SpringBoot和Vue的实验报告管理系统的设计与实现【附源码+文档,调试定制服务】
  • 【工具】log-lottery最受欢迎3D球体年会抽奖程序