上海英文网站制作漫画网站开发源码
2026/1/17 2:00:12 网站建设 项目流程
上海英文网站制作,漫画网站开发源码,移动互联网开发实习报告,wordpress研究院这个题用暴力法会超时#xff0c;使用左右指针。首先考虑如果不允许删除字符#xff0c;如何判断一个字符串是否是回文串。常见的做法是使用双指针。定义左右指针#xff0c;初始时分别指向字符串的第一个字符和最后一个字符#xff0c;每次判断左右指针指向的字符是否相同…这个题用暴力法会超时使用左右指针。首先考虑如果不允许删除字符如何判断一个字符串是否是回文串。常见的做法是使用双指针。定义左右指针初始时分别指向字符串的第一个字符和最后一个字符每次判断左右指针指向的字符是否相同如果不相同则不是回文串如果相同则将左右指针都往中间移动一位直到左右指针相遇则字符串是回文串。在允许最多删除一个字符的情况下同样可以使用双指针通过贪心实现。初始化两个指针 low 和 high 分别指向字符串的第一个字符和最后一个字符。每次判断两个指针指向的字符是否相同如果相同则更新指针将 low 加 1high 减 1然后判断更新后的指针范围内的子串是否是回文字符串。如果两个指针指向的字符不同则两个字符中必须有一个被删除此时我们就分成两种情况即删除左指针对应的字符留下子串 s[low1:high]或者删除右指针对应的字符留下子串 s[low:high−1]。当这两个子串中至少有一个是回文串时就说明原始字符串删除一个字符之后就以成为回文串。class Solution { public: bool Isover(string s,int left, int right){ while(leftright){ if(s[left]!s[right]){ return false; } else{ left; right--; } } return true; } bool validPalindrome(string s) { int left0; int rights.size()-1; while(leftright){ if(s[left]!s[right]){ return Isover(s,left1,right) || Isover(s,left,right-1); } else{ left; right--; } } return true; } };由于 x 平方根的整数部分 ans 是满足 k^2 ≤x 的最大 k 值因此我们可以对 k 进行二分查找从而得到答案。二分查找的下界为 0上界可以粗略地设定为 x。在二分查找的每一步中我们只需要比较中间元素 mid 的平方与 x 的大小关系并通过比较的结果调整上下界的范围。由于我们所有的运算都是整数运算不会存在误差因此在得到最终的答案 ans 后也就不需要再去尝试 ans1 了。class Solution { public: int mySqrt(int x) { int left0; int rightx; int ans-1; while(leftright){ int midleft(right-left)/2; if((long long) mid* midx) rightmid-1; else{ ans mid; leftmid1; } } return ans; } };比较值得一说的地方就是两个数leftright存在超范围的可能这里使用了一个技巧为了避免left right直接相加导致整数溢出使用left (right - left) / 2来计算中点这是二分查找的安全写法。(right - left)一定 ≤INT_MAX

需要专业的网站建设服务?

联系我们获取免费的网站建设咨询和方案报价,让我们帮助您实现业务目标

立即咨询