面试经典算法题之双指针专题

devtools/2024/9/23 14:33:41/

力扣经典面试题之双指针 ( 每天更新, 每天一题 )

文章目录

  • 力扣经典面试题之双指针 ( 每天更新, 每天一题 )
    • 验证回文串
      • 收获
    • 392. 判断子序列
    • 167. 两数之和 - 输入有序数组

验证回文串

在这里插入图片描述
思路

一: 筛选 + 双指针验证

class Solution {
public:bool isPalindrome(string s) {// 所有大写字母 ==> 小写 去除非字母部分if(s == "") {return true;}string str = "";int s_size = s.size();for(int i = 0; i< s_size; i++) {// 大写字母if(s[i]-'0' >= 'A'-'0' && s[i]-'0' <= 'Z'-'0' ) {str += 'a'+s[i]-'A';}else if ((s[i]-'0' >= 'a'-'0' && s[i]-'0' <= 'z'-'0') || isdigit(s[i])) {str += s[i];}}// 判断回文int str_size = str.size();for(int l = 0, r = str_size-1;l < r ;l++, r-- ) {// 不相等if(str[l] != str[r]) {return false;}}return true;}
};

代码二: 巧用 API
最简单的方法是对字符串 sss 进行一次遍历,并将其中的字母和数字字符进行保留,放在另一个字符串
第一种是使用语言中的字符串翻转 API 得到 sgood 的逆序字符串

class Solution {
public:bool isPalindrome(string s) {string sgood;for (char ch: s) {if (isalnum(ch)) {sgood += tolower(ch);}}string sgood_rev(sgood.rbegin(), sgood.rend());return sgood == sgood_rev;}
};

收获

这到题目, 就是简单的双指针例题
在代码中使用到一些函数,可以记一下
tolower(ch) 函数 是把大写字母转成小写字母
isdigit(ch) 函数 是判断该字符是否为数字,也就是 ‘0’ 到 ‘9’

392. 判断子序列

在这里插入图片描述
思路
一、 双指针
就是两个字符串都有一个指针
分别移动
二、动态规划
在这里插入图片描述

#include <bits/stdc++.h>
using namespace std;bool isSubsequence(string s, string t)
{// 直接暴力int s_size = s.size();int t_size = t.size();int i = 0;int j = 0;for (; i < s_size && j < t_size;){if (s[i] == t[j]){i++;}j++;}if (i == s_size){return true;}else{return false;}
}
int main()
{string s, t;s = "dfadf";t = "dfadf";cout<<isSubsequence(s,t)<<endl;return 0;
}

动态规划

class Solution {
public:bool isSubsequence(string s, string t) {int n = s.size(), m = t.size();vector<vector<int> > f(m + 1, vector<int>(26, 0));for (int i = 0; i < 26; i++) {f[m][i] = m;}for (int i = m - 1; i >= 0; i--) {for (int j = 0; j < 26; j++) {if (t[i] == j + 'a')f[i][j] = i;elsef[i][j] = f[i + 1][j];}}int add = 0;for (int i = 0; i < n; i++) {if (f[add][s[i] - 'a'] == m) {return false;}add = f[add][s[i] - 'a'] + 1;}return true;}
};

167. 两数之和 - 输入有序数组

在这里插入图片描述
思路
一 、 遍历 + 二分查找 ( 有序 )
二、 直接数组左右两边双指针, 求和遍历
Code

class Solution {
public:vector<int> twoSum(vector<int>& numbers, int target) {for (int i = 0; i < numbers.size(); ++i) {int low = i + 1, high = numbers.size() - 1;while (low <= high) {int mid = (high - low) / 2 + low;if (numbers[mid] == target - numbers[i]) {return {i + 1, mid + 1};} else if (numbers[mid] > target - numbers[i]) {high = mid - 1;} else {low = mid + 1;}}}return {-1, -1};}
};

写法二: 这里有空可以研究一下

简单来说就是, 有关于万能模板, 如果遇到这种左边界 或者 右边界 变化时, 需要做出什么样的改变

class Solution {
public:vector<int> twoSum(vector<int>& numbers, int target) {for(int i = 0;i< numbers.size() ; i++ ) {int l = i;// 左边下标int r = numbers.size()-1;    // 这里 需要减1  不减 1 就会出现数组越界    int mid = 0;while( l + 1 != r) {mid = (l+r) / 2;if(numbers[mid] < target - numbers[i]) {l = mid;} else {r = mid;}}// 判断一下if(numbers[r] == target -numbers[i]) {return {i+1,r+1};}}return {-1,-1};}
};
class Solution {
public:vector<int> twoSum(vector<int>& numbers, int target) {int l = 0;int r = numbers.size()-1;while(l < r) {int sum = numbers[l] + numbers[r];if(sum> target) {r--;} else if(sum < target ) {l++;} else {return {l+1, r+1};}}return {-1,-1};}
};

http://www.ppmy.cn/devtools/27273.html

相关文章

【工程记录】Python爬虫入门记录(Requests BeautifulSoup)

目录 写在前面1. 环境配置2. 获取网页数据3. 解析网页数据4. 提取所需数据4.1 简单提取4.2 多级索引提取 5. 常见问题 写在前面 仅作个人学习与记录用。主要整理使用Requests和BeautifulSoup库的简单爬虫方法。在进行数据爬取时&#xff0c;请确保遵守相关法律法规和网站的服务…

ZISUOJ 高级语言程序设计实训-基础C(部分题)

说明&#xff1a; 有几个题是不会讲的&#xff0c;我只能保证大家拿保底分。 题目列表&#xff1a; 问题 A: 求平均数1 思路&#xff1a; 送分题…… 参考题解&#xff1a; #include <iostream> #include <iomanip> using std::cin; using std::cout;int main(…

CSS高级选择器

一、属性选择器 以value开头的att属性的E元素&#xff1a;E[att^"value"]{ ;} a[href^http]{background-color"red";} css a[href^http]{background-color"red"; } html <!DOCTYPE html> <html lang"en"> <head&…

Stable Diffusion一键安装包启动疑难报错解析:Python 无法找到模块‘urlib’以及其他报错的解决方法

在探索Stable Diffusion&#xff08;简称SD&#xff09;这一强大技术的旅程中&#xff0c;我们有时可能会遇到一些始料未及的问题。其中&#xff0c;启动一键安装包时遭遇的“Python 无法找到模块‘urlib’”的报错&#xff0c;就是许多新手用户可能会碰到的一个挑战。 更多内…

GateWay具体的使用之局部过滤器接口耗时

1.找规律 局部过滤器命名规则 XXXGatewayFilterFactory&#xff0c; 必须以GatewayFilterFactory结尾。 /* 注意名称约定 * AddRequestHeaderGatewayFilterFactory 配置的时候写的是 AddRequestHeader * AddRequestParameterGatewayFilterFactory 配置的时候写的是 A…

ElasticSearch教程入门到精通——第二部分(基于ELK技术栈elasticsearch 7.x新特性)

ElasticSearch教程入门到精通——第二部分&#xff08;基于ELK技术栈elasticsearch 7.x新特性&#xff09; 1. JavaAPI-环境准备1.1 新建Maven工程——添加依赖1.2 HelloElasticsearch 2. 索引2.1 索引——创建2.2 索引——查询2.3 索引——删除 3. 文档3.1 文档——重构3.2 文…

Pytest:hooks钩子函数

Pytest&#xff1a;hooks钩子函数 Bootstrapping hooks 引导钩子Initialization hooks 初始化钩子Collection hooks 测试用例收集钩子Test running (runtest) hooks 测试运行钩子Reporting hooks 测试报告钩子Debugging/Interaction hooks 调试/交互钩子 Pytest的钩子函数可分为…

2024-04-29 区块链-项目-记录

摘要: 2024-04-29 区块链-项目-记录 区块链项目记录: (1) C 比特币(BTC) github&#xff1a; https://github.com/bitcoin/bitcoin 莱特币(LTC) github&#xff1a; https://github.com/litecoin-project/litecore-litecoin 瑞波币(XRP) github&#xff1a; https://gi…