C++算法题 - 双指针

目录

  • 125. 验证回文串
  • 392. 判断子序列
  • 167. 两数之和 Ⅱ - 输入有序数组
  • 11. 盛最多的水
  • 15. 三数之和

125. 验证回文串

LeetCode_link


如果在将所有大写字符转换为小写字符、并移除所有非字母数字字符之后,短语正着读和反着读都一样。则可以认为该短语是一个 回文串

字母和数字都属于字母数字字符。

给你一个字符串 s,如果它是 回文串 ,返回 true ;否则,返回 false

示例 1
输入: s = “A man, a plan, a canal: Panama”
输出:true
解释:“amanaplanacanalpanama” 是回文串。

示例 2
输入:s = “race a car”
输出:false
解释:“raceacar” 不是回文串。

示例 3
输入:s = " "
输出:true
解释:在移除非字母数字字符之后,s 是一个空字符串 “” 。
由于空字符串正着反着读都一样,所以是回文串。

提示
1 <= s.length <= 2 * 105
s 仅由可打印的 ASCII 字符组成


节省空间版

class Solution {
public:bool isPalindrome(string s) {//去掉其他东西for(int i = 0; i < s.size(); i++){if(s[i] >= 'A' && s[i] <= 'Z'){s[i] = 'a' + s[i] - 'A';}else if(!(s[i] >= 'a' && s[i] <= 'z') && !(s[i] >= '0' && s[i] <= '9')){s.erase(i, 1);i --;}}int i = 0, j = s.size() - 1;while(i <= j){if(s[i] == s[j]){i++;j--;}else{return false;}}return true;}
};

392. 判断子序列

LeetCode_link


给定字符串 st ,判断 s 是否为 t 的子序列。

字符串的一个子序列是原始字符串删除一些(也可以不删除)字符而不改变剩余字符相对位置形成的新字符串。(例如,"ace""abcde"的一个子序列,而"aec"不是)。

示例 1
输入:s = “abc”, t = “ahbgdc”
输出:true

示例 2
输入:s = “axc”, t = “ahbgdc”
输出:false

提示
0 <= s.length <= 100
0 <= t.length <= 10^4
两个字符串都只由小写字符组成。


class Solution {
public:bool isSubsequence(string s, string t) {int n = s.size(), m = t.size();if(n == 0)  return true; // 空串是任意字符串的子串if(m == 0) return false;int i = 0, j = 0;while(i < n && j < m){if(s[i] == t[j]){cout << "s[i]: " << s[i] << " t[j]: "  << t[j] << endl;i ++;}j ++;}if(i < n && j >= m) return false;return true;}
};

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

LeetCode_link


给你一个下标从 1 开始的整数数组 numbers ,该数组已按 非递减顺序排列 ,请你从数组中找出满足相加之和等于目标数 target 的两个数。如果设这两个数分别是 numbers[index1]numbers[index2] ,则 1 <= index1 < index2 <= numbers.length

以长度为 2 的整数数组 [index1, index2] 的形式返回这两个整数的下标 index1index2

你可以假设每个输入 只对应唯一的答案 ,而且你 不可以 重复使用相同的元素。

你所设计的解决方案必须只使用常量级的额外空间。

示例 1
输入:numbers = [2,7,11,15], target = 9
输出:[1,2]
解释:2 与 7 之和等于目标数 9 。因此 index1 = 1, index2 = 2 。返回 [1, 2] 。

示例 2
输入:numbers = [2,3,4], target = 6
输出:[1,3]
解释:2 与 4 之和等于目标数 6 。因此 index1 = 1, index2 = 3 。返回 [1, 3] 。

示例 3
输入:numbers = [-1,0], target = -1
输出:[1,2]
解释:-1 与 0 之和等于目标数 -1 。因此 index1 = 1, index2 = 2 。返回 [1, 2] 。

提示
2 <= numbers.length <= 3 * 104
-1000 <= numbers[i] <= 1000
numbers 按 非递减顺序 排列
-1000 <= target <= 1000
仅存在一个有效答案


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

11. 盛最多的水

LeetCode_link


给定一个长度为 n 的整数数组 height 。有 n 条垂线,第 i 条线的两个端点是 (i, 0)(i, height[i])

找出其中的两条线,使得它们与 x 轴共同构成的容器可以容纳最多的水。

返回容器可以储存的最大水量。

说明:你不能倾斜容器。

示例 1
在这里插入图片描述

输入:[1,8,6,2,5,4,8,3,7]
输出:49
解释:图中垂直线代表输入数组 [1,8,6,2,5,4,8,3,7]。在此情况下,容器能够容纳水(表示为蓝色部分)的最大值为 49。

示例 2
输入:height = [1,1]
输出:1

提示
n == height.length
2 <= n <= 105
0 <= height[i] <= 104


思路:将短板向内变化,寻找能让面积变大的可能性

class Solution {
public:int maxArea(vector<int>& height) {int i = 0, j = height.size() - 1;int maxA = 0;while(i < j){maxA = max(maxA,min(height[i], height[j]) * (j - i));if(height[i] > height[j]){j --;}else{i ++;}}return maxA;}
};

15. 三数之和

LeetCode_link


给你一个整数数组 nums ,判断是否存在三元组 [nums[i], nums[j], nums[k]] 满足 i != ji != kj != k ,同时还满足 nums[i] + nums[j] + nums[k] == 0 。请

你返回所有和为 0 且不重复的三元组。

注意:答案中不可以包含重复的三元组。

示例 1
输入:nums = [-1,0,1,2,-1,-4]
输出:[[-1,-1,2],[-1,0,1]]
解释:
nums[0] + nums[1] + nums[2] = (-1) + 0 + 1 = 0 。
nums[1] + nums[2] + nums[4] = 0 + 1 + (-1) = 0 。
nums[0] + nums[3] + nums[4] = (-1) + 2 + (-1) = 0 。
不同的三元组是 [-1,0,1] 和 [-1,-1,2] 。
注意,输出的顺序和三元组的顺序并不重要。

示例 2
输入:nums = [0,1,1]
输出:[]
解释:唯一可能的三元组和不为 0 。

示例 3
输入:nums = [0,0,0]
输出:[[0,0,0]]
解释:唯一可能的三元组和为 0 。

提示
3 <= nums.length <= 3000
-105 <= nums[i] <= 105


思路:固定一个数,让另外两个数双指针移动。注意可能存在重复的数字。

class Solution {
public:vector<vector<int>> threeSum(vector<int>& nums) {int n = nums.size();sort(nums.begin(), nums.end());vector<vector<int>> rec;for(int k = 0; k < n; k++){ //k是固定的数if(k > 0 && nums[k] == nums[k-1])   continue;  //去掉重复项int i = k + 1, j = n - 1;while(i < j){if(nums[i] + nums[j] + nums[k] < 0){i++;}else if(nums[i] + nums[j] + nums[k] > 0){j --;}else{rec.push_back({nums[i], nums[j], nums[k]});while (i+1 < n && nums[i] == nums[++i]);  //去掉重复项while (j-1 > 0 && nums[j] == nums[--j]);}}}return rec;}
};

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

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

滑动窗口例题

一、209:长度最小的子数组 209:长度最小的子数组 思路&#xff1a;1、暴力解法&#xff1a;两层for循环遍历&#xff0c;当sum > target时计算子数组长度并与result比较&#xff0c;取最小的更新result。提交但是超出了时间限制。 class Solution {public int minSubArray…

Object和Objects

Object Object是Java中的顶级父类.所有的类都直接或间接的继承Object类. Object类中的方法可以被所有子类访问,所以我们要学习Object类和其中的方法. Object的构造方法: Object的成员方法 public class test {public static void main(String[] args) {//1.toString 返回对象…

03 Git 之 远程仓库 + IDEA 集成使用 GitHub

1. 远程仓库 origin&#xff1a;即远程仓库 url 的指代。 从网上随意 clone 一个仓库&#xff0c;进入 .git/config 文件, 即可编辑远程仓库的 url&#xff0c;也可以自定义想要指代该 url 的名词。 1.1 本地仓库绑定远程仓库 并 推送、拉取 git remote add 【想要起的指代…

ruoyi单体+react+antdesign

基于ruoyi vue和Ruoyi-React实现的快速开发工具。 源码地址&#xff1a;GitHub - hebian1994/ruoyi-react-single: use ruoyi to generage java backend code and reacr front end code 前端&#xff1a;基于ant-design-pro 后端&#xff1a;单体springboot项目(非cloud)mysq…

人工智能——大语言模型

5. 大语言模型 5.1. 语言模型历史 20世纪90年代以前的语言模型都是基于语法分析这种方法&#xff0c;效果一直不佳。到了20世纪90年代&#xff0c;采用统计学方法分析语言&#xff0c;取得了重大进展。但是在庞大而复杂的语言信息上&#xff0c;基于传统统计的因为计算量巨大…

【JSON2WEB】 13 基于REST2SQL 和 Amis 的 SQL 查询分析器

【JSON2WEB】01 WEB管理信息系统架构设计 【JSON2WEB】02 JSON2WEB初步UI设计 【JSON2WEB】03 go的模板包html/template的使用 【JSON2WEB】04 amis低代码前端框架介绍 【JSON2WEB】05 前端开发三件套 HTML CSS JavaScript 速成 【JSON2WEB】06 JSON2WEB前端框架搭建 【J…

服务器中文字体问题

首先&#xff0c;确保fc-list、fc-cache命令可用&#xff0c;如果该命令不存在&#xff0c;需要安装该命令&#xff1a;https://command-not-found.com/fc-list fc-list 输出&#xff1a; /usr/share/fonts/truetype/dejavu/DejaVuSerif-Bold.ttf: DejaVu Serif:styleBold /us…

APP开发_Hammer.js 触摸事件处理库教程

1 Hammer.js 概述 Hammer.js 是一个开源的、轻量级的触屏设备 JavaScript 手势库。它可以在不需要依赖其他工具或库的情况下识别触摸和鼠标事件&#xff0c;允许同时监听多个手势&#xff0c;甚至自定义识别器&#xff0c;并识别滑动方向。 Hammer.js 的主要特点包括&#xf…

架构设计-权限系统之通用的权限系统设计方案

一个系统&#xff0c;如果没有安全控制&#xff0c;是十分危险的&#xff0c;一般安全控制包括身份认证和权限管理。用户访问时&#xff0c;首先需要查看此用户是否是合法用户&#xff0c;然后检查此用户可以对那些资源进行何种操作&#xff0c;最终做到安全访问。身份认证的方…

AIGC专栏10——EasyAnimate 一个新的类SORA文生视频模型 轻松文生视频

AIGC专栏10——EasyAnimate 一个新的类SORA文生视频模型 &#x1f4fa;轻松文生视频 学习前言源码下载地址技术原理储备&#xff08;DIT/Lora/Motion Module&#xff09;什么是Diffusion Transformer (DiT)LoraMotion Module EasyAnimate简介EasyAnimate原理界面展示快速启动云…

LeetCode 每日一题 2024/4/8-2024/4/14

记录了初步解题思路 以及本地实现代码&#xff1b;并不一定为最优 也希望大家能一起探讨 一起进步 目录 4/8 2009. 使数组连续的最少操作数4/9 2529. 正整数和负整数的最大计数4/10 1702. 修改后的最大二进制字符串4/11 1766. 互质树4/12 2923. 找到冠军 I4/13 2924. 找到冠军 …

一个极简鲁棒的C语言的动态数据类型扩展,取代诸如C++/Rust那些愚蠢的东西

项目地址&#xff1a;https://github.com/shajunxing/banana-cvar 我用过很多高级语言&#xff0c;喜欢简单的东西&#xff0c;讨厌C&#xff0c;一直在想C语言能不能用最简洁的手段扩充动态语言特性&#xff0c;并且支持垃圾回收呢&#xff1f;偶然迸发出灵感&#xff0c;网上…

vue3中使用antv-S2表格(基础功能版)

先看展示效果&#xff1a; 可以调整行宽、列宽、自定义字段图标、表头图标、添加排序、显示总计、小计等 首先确保搭建一个vue3项目环境&#xff0c;从0开始的小伙伴着重看第一点&#xff1a; 一、搭建vue3项目环境 首先创建一个vue3vitets项目&#xff0c;可以查看下面相关…

Mojo语言初次入手

Mojo的出现被认为是编程语言领域的一大进步&#xff0c;有观点认为它可能是几十年来最大的编程进步???!!! 让我来试试&#xff0c;看看是怎么回事。 安装Mojo 打开命令行界面。执行以下命令来安装Mojo SDK&#xff1a; curl -s https://get.modular.com | sh - 3.接下来&…

大厂Java笔试题之百钱买百鸡问题

题目&#xff1a;公元五世纪&#xff0c;我国古代数学家张丘建在《算经》一书中提出了"百鸡问题"&#xff1a;鸡翁一值钱五&#xff0c;鸡母一值钱三&#xff0c;鸡雏三值钱一。 百钱买百鸡&#xff0c;问鸡翁、鸡母、鸡雏各几何&#xff1f; 现要求你打印出所有花一…

uniapp——长按识别二维码

说明 转变思路&#xff0c;长按图片&#xff0c;进入预览图片&#xff0c;这时候再长按就可以了。 <view class"codeMain"><view class"codeWhite" longpress"handleLongPress(i.image(qrcode))"><image :src"i.image(qrc…

解决前端笔记本电脑屏幕显示缩放比例125%、150%对页面大小的影响问题--数据可视化大屏

近期在工作中遇到一个问题&#xff0c;记录一下&#xff0c;在项目上线之后&#xff0c;遇到一个问题&#xff0c;即缩放到90%时&#xff0c;页面字体比默认的100%字体大&#xff0c;一开始毫无头绪&#xff0c;经过一番的Google...Google...Google....&#xff0c;终于找到了解…

游戏服务器DDOS克星-抗D盾(游戏盾)

随着网络游戏市场的不断扩大和发展&#xff0c;游戏服务器遭受DDOS攻击的频率也在逐年增加。DDOS攻击的主要目的是使游戏服务器瘫痪&#xff0c;使得游戏无法正常进行&#xff0c;导致游戏运营商巨额损失。鉴于此&#xff0c;针对游戏服务器的防DDOS攻击技术德迅云安全自主研发…

冲刺2024年思维100春季线上比赛:做做历年思维100真题(附答案)

今天是2024年4月14日&#xff0c;距离2024年春季思维100活动第一阶段的线上比赛4月20日还有6天。那么2024年思维100活动的考试重点是什么呢&#xff1f;主办方未公布&#xff0c;我们可以从历年的思维100真题中来分析和推测&#xff0c;把历年真题和背后的知识点吃透了&#xf…

6.0 MapReduce 使用

6.0 MapReduce 使用 分类 编程 在学习了之前的 MapReduce 概念之后&#xff0c;我们应该已经知道什么是 Map 和 Reduce&#xff0c;并了解了他们的工作方式。 本章将学习如何使用 MapReduce。 Word Count Word Count 就是"词语统计"&#xff0c;这是 MapReduce 工…