力扣75——双指针

总结leetcode75中双指针的算法题解题思路。
上一篇:力扣75——数组与字符串
以下代码大部分为本人所写,少部分为官方示例代码。

力扣75——双指针

  • 1 移动零
  • 2 判断子序列
  • 3 K 和数对的最大数目
  • 4 盛最多水的容器
  • 1-4 解题总结

1 移动零

题目:

给定一个数组 nums,编写一个函数将所有 0 移动到数组的末尾,同时保持非零元素的相对顺序。请注意 ,必须在不复制数组的情况下原地对数组进行操作。

题解:两指针一前一后。left指向非零子序列的下一个位置,right指向正在检查的位置。
用right遍历一遍,如果元素非零,将该元素放到left的位置,然后left+1。

class Solution {public:void moveZeroes(vector<int>& nums) {int ns = nums.size();if (ns < 2) return;int left = 0;for (int right = 0;  right < ns; ++right) {if (nums[right] != 0) swap(nums[right], nums[left++]);}}};

2 判断子序列

题目:

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

题解:两指针分别指向一个s和t。

class Solution {public:bool isSubsequence(string s, string t) {int sidx = 0, tidx = 0, ssize = s.size(), tsize = t.size();if (ssize > tsize) return false;while (sidx < ssize &&tidx < tsize) {if (t[tidx] == s[sidx]) sidx++;tidx++;}return sidx == ssize;}};

3 K 和数对的最大数目

题目:

给你一个整数数组 nums 和一个整数 k 。每一步操作中,你需要从数组中选出和为 k 的两个整数,并将它们移出数组。返回你可以对数组执行的最大操作数。

题解:两指针一左一右。先排序,然后用while循环将left和right向中间靠近。
排序。
初始时,left指向最左边,right指向最右边。
如果nums[left]+nums[right]==k,找到了一个,各自向中间缩进一格。此时可以认为是新的一个数组,继续判断其两端值的和。
如果nums[left]+nums[right]<k,则说明需要nums[left]或nums[right]的值变大才能满足条件,由于nums[right]已经是最大值,所以只能移动left到下一位。此时可以认为是新的一个数组,继续判断其两端值的和。
如果nums[left]+nums[right]>k,则说明需要nums[left]或nums[right]的值小才能满足条件,由于nums[left]已经是最小值,所以只能移动right到下一位。此时可以认为是新的一个数组,继续判断其两端值的和。

class Solution {
public:int maxOperations(vector<int>& nums, int k) {sort(nums.begin(), nums.end());int left = 0, right = nums.size() - 1;int res = 0;while (left < right) {if (nums[left] + nums[right] == k) {res++;left++;right--;} else if (nums[left] + nums[right] > k) {right--;} else {left++;}}return res;}
};

4 盛最多水的容器

题目:

给定一个长度为 n 的整数数组 height 。有 n 条垂线,第 i 条线的两个端点是 (i, 0)(i, height[i]) 。找出其中的两条线,使得它们与 x 轴共同构成的容器可以容纳最多的水。返回容器可以储存的最大水量。说明:你不能倾斜容器。

题解:两指针一左一右。
用nmax记录遍历过的最大储水量。
如果height[left] < height[right],则

(right - left)*(min(height[left], height[right]))  
=  (right - left)*(height[left])
>  ((right-1) - left)*(height[left]) 
>= ((right-1) - left)*(min(height[left], height[right-1]))

所以right-1是没有必要的,left+1。
如果height[left] > height[right]同理。

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

1-4 解题总结

题目类型:都是vector或string。
双指针类型1:一个指向最左边,一个指向最右边。
双指针类型2:指针一前一后。

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

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

相关文章

设计模式-享元模式在Java中的使用示例-围棋软件

场景 享元模式 简介 当一个软件系统在运行时产生的对象数量太多&#xff0c;将导致运行代价过高&#xff0c;带来系统性能下降等问题。 例如在一个文本字符串中存在很多重复的字符&#xff0c;如果每一个字符都用一个单独的对象来表示&#xff0c;将会占用 较多的内存空间…

【案例教程】基于Python机器学习、深度学习技术提升气象、海洋、水文领域实践应用能力

Python是功能强大、免费、开源&#xff0c;实现面向对象的编程语言&#xff0c;能够在不同操作系统和平台使用&#xff0c;简洁的语法和解释性语言使其成为理想的脚本语言。除了标准库&#xff0c;还有丰富的第三方库&#xff0c;Python在数据处理、科学计算、数学建模、数据挖…

Vue中值的传递(父传子,子传父,子父同步)

1.父组件->子组件传递数据 ①父组件通过 v-bind: 属性绑定的形式&#xff0c;把数据传递给子组件 如果不需要动态绑定&#xff0c;则可以直接写number“张三” ②子组件中&#xff0c;通过props接收父组件传递过来的数据 2.子组件->父组件传递数据 1.在子组件中&#xf…

实现外部缓存-Redis

目录 实现 RedisTemplate RedisTemplate的序列化 RedisSerializer 创建Redis缓存配置类 测试使用 创建配置类 创建注解测试实体 创建配置文件 创建单元测试类进行测试 实现 RedisTemplate XXXTemplate 是 Spring 的一大设计特色&#xff0c;其中&#xff0c;RedisTe…

【基础算法】——双指针算法

文章目录 一、算法原理二、算法实战1. 力扣283 移动零2. 力扣1089 复写零3. 力扣15 三数之和4. 力扣18 四数之和 三、总结 一、算法原理 双指针算法是指在遍历对象的过程中不是普通的使用单个指针进行访问&#xff0c;而是使用两个相同方向(快慢指针)或者相反方向&#xff08;…

Tomcat服务器下载安装及配置教程(IDEA中使用Tomcat)

目录 友情提醒第一章、Tomcat下载与安装1.1&#xff09;Tomcat介绍1.2&#xff09;官网下载 第二章、Tomcat配置环境变量2.1&#xff09;windows环境变量配置2.2&#xff09;验证Tomcat配置是否成功2.3&#xff09;报错解决 第三章、IDEA整合Tomcat3.1&#xff09;打开IDEA开发…

【深度学习笔记】随机梯度下降法

本专栏是网易云课堂人工智能课程《神经网络与深度学习》的学习笔记&#xff0c;视频由网易云课堂与 deeplearning.ai 联合出品&#xff0c;主讲人是吴恩达 Andrew Ng 教授。感兴趣的网友可以观看网易云课堂的视频进行深入学习&#xff0c;视频的链接如下&#xff1a; 神经网络和…

springboot项目创建整个完成过程和注意事项

1&#xff1a;application.yml文件配置 server:port: 8088servlet:context-path: /test spring:datasource:name: text #????url: jdbc:mysql://localhost:3306/dsdd?serverTimezoneGMT&useUnicodetrue&characterEncodingutf-8&useSSLtrueusername: root #…

Rust 数据类型 之 结构体(Struct)

目录 结构体&#xff08;Struct&#xff09; 定义与声明 结构体定义 结构体实例 结构体分类 单元结构体&#xff08;Unit Struct&#xff09; 元组结构体&#xff08;Tuple Struct&#xff09; 具名结构体&#xff08;Named Struct&#xff09; 结构体嵌套 结构体方法…

【后端面经】前言汇总(0)

文章目录 一、机会是留给有准备的人二、课程设计第一部分:微服务架构第二部分:数据库与 MySQL第三部分:消息队列第四部分:缓存所谓缓存用得好,性能没烦恼。第五部分:NoSQL三、总结一、机会是留给有准备的人 近两年互联网行业增速放缓,ChatGPT 又引发了一波新的 AI 浪潮,…

69. x 的平方根

69. x 的平方根 给你一个非负整数 x &#xff0c;计算并返回 x 的 算术平方根 。 由于返回类型是整数&#xff0c;结果只保留 整数部分 &#xff0c;小数部分将被 舍去 。 注意&#xff1a;不允许使用任何内置指数函数和算符&#xff0c;例如 pow(x, 0.5) 或者 x ** 0.5 。 示…

线段树模板+例题

线段树是一种二叉搜索数&#xff0c;一般用来实现动态的区间询问&#xff0c;与树状数组有相似之处&#xff0c;但是能用树状数组实现的操作都能用线段树实现。 一般线段树用于以下几种操作&#xff1a; 建树&#xff0c;单点修改&#xff0c;区间查询&#xff0c;区间修改。…

VSCode 常用插件集合

目录 一、基础插件二、AI三、Rust插件 一、基础插件 Chinese (Simplified) (简体中文) 此中文&#xff08;简体&#xff09;语言包为 VS Code 提供本地化界面。 Native Debug 本地VSCode调试器。 CodeLLDB 一个由LLDB提供支持的本地调试器。调试c&#xff0c; Rust等编译语言…

【Android实现 资源路径/手机内存/网络文件 下的视频播放】

业务场景&#xff1a;安卓实现播放视频的功能&#xff0c;支持播放不同类型资源下的视频&#xff0c;下面在使用中封装了一个方法&#xff0c;可以根据需要修改调用 一、直接上封装方法 void videoReady(String videoPath ,String videoType){switch (videoType) {case "…

使用ffmpeg合并视频遇到的坑

下面以Linux环境介绍为主 1.ffmpeg可执行命令不同的环境是不同的&#xff0c;Linux在执行命令前还需要授权。 2.合并视频命令&#xff1a; 主要命令: {} -f concat -auto_convert 0 -safe 0 -i {} -y -c:v copy 坑一&#xff1a;其中第一个花括号替换的是可执行命令所在的…

【GitOps系列】使用Kustomize和Helm定义应用配置

文章目录 使用 Kustomize 定义应用改造示例应用1.创建基准和多环境目录2.环境差异分析3.为 Base 目录创建通用 Manifest4.为开发环境目录创建差异 Manifest5.为预发布环境创建差异 Manifest6.为生产环境创建差异 Manifest 部署 Kustomize 应用部署到开发环境部署到生产环境 使用…

c++ 的引用

c 引用 引用的概念 应用不是重新去定义一个变量&#xff0c;而是给变量取别名。 引用不是新定义一个变量&#xff0c;而是给已存在变量取了一个别名&#xff0c;编译器不会为引用变量开辟内存空 间&#xff0c;它和它引用的变量共用同一块内存空间 比如&#xff1a; int a…

OpenCv (C++) 使用矩形 Rect 覆盖图像中某个区域

文章目录 1. 使用矩形将图像中某个区域置为黑色2. cv::Rect 类介绍 1. 使用矩形将图像中某个区域置为黑色 推荐参考博客&#xff1a;OpenCV实现将任意形状ROI区域置黑&#xff08;多边形区域置黑&#xff09; 比较常用的是使用 Rect 矩形实现该功能&#xff0c;代码如下&…

打造i-SMART智能网联平台,亚马逊云科技助力上汽快速出海

当前在各大外资车企不断加码在华投资之际&#xff0c;越来越多的中国汽车品牌纷纷开始走出国门&#xff0c;加速推进全球化业务&#xff0c;将赛道转至更为广阔的海外市场。 上汽海外出行科技有限公司&#xff08;简称“上汽海外出行”&#xff09;成立于2018年&#xff0c;承…

linux高并发web服务器开发(web服务器)18_函数解析http请求, 正则表达式,sscanf使用,http中数据特殊字符编码解码

pdf详情版 01 学习目标 编写函数解析http请求 ○ GET /hello.html HTTP/1.1\r\n ○ 将上述字符串分为三部分解析出来编写函数根据文件后缀&#xff0c;返回对应的文件类型sscanf - 读取格式化的字符串中的数据 ○ 使用正则表达式拆分 ○ [^ ]的用法通过浏览器请求目录数据 ○…