【leetcode】快慢指针相关题目总结

141. 环形链表

判断链表是否有环:如果链表中存在环,则在链表上不断前进的指针会一直在环里绕圈子,且不能知道链表是否有环。使用快慢指针,当链表中存在环时,两个指针最终会在环中相遇。

/*** Definition for singly-linked list.* struct ListNode {*     int val;*     ListNode *next;*     ListNode(int x) : val(x), next(NULL) {}* };*/
class Solution {
public:bool hasCycle(ListNode *head) {ListNode* slow = head;ListNode* fast = head;while (fast && fast->next) {slow = slow->next;fast = fast->next->next;if (slow == fast) {return true;}}return false;}
};

142. 环形链表 II

判断链表中环的起点:当我们判断出链表中存在环,并且知道了两个指针相遇的节点,我们可以让其中任一个指针指向头节点,然后让它俩以相同速度前进,再次相遇时所在的节点位置就是环开始的位置。

/*** Definition for singly-linked list.* struct ListNode {*     int val;*     ListNode *next;*     ListNode(int x) : val(x), next(NULL) {}* };*/
class Solution {
public:ListNode *detectCycle(ListNode *head) {if (head == NULL || head->next == NULL) {return NULL;}ListNode* slow = head;ListNode* fast = head;while (true) {// 如果没有环,直接返回if (fast == NULL || fast->next == NULL) {return NULL;}slow = slow->next;fast = fast->next->next;if (slow == fast) {break;}}slow = head;while (slow != fast) {slow = slow->next;fast = fast->next;}return slow;}
};

876. 链表的中间结点

快指针一次前进两步,慢指针一次前进一步,当快指针到达链表尽头时,慢指针就处于链表的中间位置。

  • 当链表的长度是奇数时,slow 恰巧停在中点位置;
  • 如果长度是偶数,slow 最终的位置是中间偏右
/*** Definition for singly-linked list.* struct ListNode {*     int val;*     ListNode *next;*     ListNode() : val(0), next(nullptr) {}*     ListNode(int x) : val(x), next(nullptr) {}*     ListNode(int x, ListNode *next) : val(x), next(next) {}* };*/
class Solution {
public:ListNode* middleNode(ListNode* head) {ListNode* slow = head;ListNode* fast = head;while (fast != nullptr && fast->next != nullptr) {slow = slow->next;fast = fast->next->next;}return slow;}
};

19. 删除链表的倒数第 N 个结点

先让其中一个指针向前走k步,接着两个指针以同样的速度一起向前进,直到前面的指针走到尽头了,则后面的指针即为倒数第k个元素。

/*** Definition for singly-linked list.* struct ListNode {*     int val;*     ListNode *next;*     ListNode() : val(0), next(nullptr) {}*     ListNode(int x) : val(x), next(nullptr) {}*     ListNode(int x, ListNode *next) : val(x), next(next) {}* };*/
class Solution {
public:ListNode* findNthFromEnd(ListNode* head, int n) {ListNode* slow = head;ListNode* fast = head;for (int i = 0; i < n; ++i) {fast = fast->next;}while (fast != nullptr) {fast = fast->next;slow = slow->next;}return slow;}ListNode* removeNthFromEnd(ListNode* head, int n) {ListNode* dummy = new ListNode(-1);dummy->next = head;ListNode* pre = findNthFromEnd(dummy, n + 1);pre->next = pre->next->next;return dummy->next;}
};

674. 最长连续递增序列

思路分析:

题目要求我们找的子序列是 连续 的,并且子序列里的元素要求 严格单调递增。在遍历的时候,从第 2 个元素开始;

  • 如果当前遍历到的元素比它左边的那一个元素要严格大,「连续递增」的长度就加 1;
  • 否则「连续递增」的起始位置就需要重新开始计算。

class Solution {
public:int findLengthOfLCIS(vector<int>& nums) {int len = nums.size();int left = 0, right = 0;int res = 0;while (right < len) {if (right > 0 && nums[right-1] >= nums[right]) {left = right;}right++;res = max(res, right - left);}return res;}
};

26. 删除有序数组中的重复项

class Solution {
public:int removeDuplicates(vector<int>& nums) {int left = 0, right = 0;while (right < nums.size()) {if (nums[right] > nums[left]) {left++;nums[left] = nums[right];}right++;}return left + 1;}
};

80. 删除有序数组中的重复项 II

class Solution {
public:int removeDuplicatesK(vector<int>& nums, int k) {int len = nums.size();if (len <= k) {return len;}int slow = k;for (int fast = k; fast < len; ++fast) {if (nums[fast] != nums[slow - k]) {nums[slow] = nums[fast];slow++;}}return slow;}int removeDuplicates(vector<int>& nums) {return removeDuplicatesK(nums, 2);}
};

283. 移动零

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

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

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

相关文章

Ubuntu-22.04电源选项设置

提示&#xff1a;文章写完后&#xff0c;目录可以自动生成&#xff0c;如何生成可参考右边的帮助文档 文章目录 前言说明一、图形设置二、命令行设置1.查看支持的模式2.设置新模式 总结 前言 我们使用Windows都知道电源选项有省电、平衡和高性能模式。其实Ubuntu-22.04也有这个…

【Linux】文件系统

送给大家一句话&#xff1a; 你的任务&#xff0c;就是珍惜你自己的人生&#xff0c;而且还要比之前任何时候更加珍惜。 – 东野圭吾 文件系统 1 前言2 物理磁盘3 磁盘的存储结构4 抽象理解磁盘储存5 引入文件系统 &#xff08;如何管理磁盘文件&#xff09;5.1 了解文件系统5.…

基于 SpringCloud 的在线交易平台乐优商城的设计与实现(六)

目录 第六章 系统测试 6.1 功能性测试 6.1.1 商家后台功能测试 6.1.2 前台功能测试 6.2 非功能性测试 6.3 本章小结 结束语 参考文献 前面内容请移步 基于 SpringCloud 的在线交易平台乐优商城的设计与实现&#xff08;五&#xff09; 相关免费源码资源 乐优商城…

深入理解分布式事务① ---->分布式事务基础(四大特性、五大类型、本地事务、MySQL并发事务问题、MySQL事务隔离级别命令设置)详解

目录 深入理解分布式事务① ---->分布式事务基础&#xff08;四大特性、五大类型、本地事务、MySQL并发事务问题、MySQL事务隔离级别命令设置&#xff09;详解事务的基本概念1、什么是事务&#xff1f;2、事务的四大特性2-1&#xff1a;原子性&#xff08;Atomic&#xff09…

黑烟车智能电子抓拍系统大幅度节约人力物力

黑烟车智能电子抓拍系统大幅度节约人力物力&#xff0c;之前黑烟车监测通过执勤交警人工现场监测会耗费大量人力物力&#xff0c;效率较低&#xff0c;现在通过黑烟车智能电子抓拍系统可以大辅导提升监测效率&#xff0c;遗漏少&#xff0c;效率高&#xff0c;值得大力推广。 黑…

【Python数据库】MongoDB

文章目录 [toc]数据插入数据查询数据更新数据删除 个人主页&#xff1a;丷从心 系列专栏&#xff1a;Python数据库 学习指南&#xff1a;Python学习指南 数据插入 from pymongo import MongoClientdef insert_data():mongo_client MongoClient(hostlocalhost, port27017)co…

红米A2/A2+/POCO C51手机秒解BL+快速获取root权限+解谷歌锁刷机救砖教程

红米A2/A2/POCO C51手机是目前小米公司针对于国外用户的1个独立的品牌&#xff0c;或者和国内的红米手机都非常相似&#xff0c;几款手机由于硬件非常接近&#xff0c;我们这里将其放在一起和大家介绍而从他们的代号中我们可以得知&#xff0c;目前A2/POCO的代号为water&#x…

ctfshow web78 获取flag

第一种&#xff1a;利用input伪协议 ,获取到flag 第二种&#xff1a;利用flter协议,获取到flag https://21d9e58a-c0fd-47ea-a9c4-d875100f2fdb.challenge.ctf.show/?filephp://filter/readconvert.base64-encode/resourceflag.php 得到的结果PD9waHANCg0KLyoNCiMgLSotIGNvZG…

代码随想录算法训练营第12天:滑动窗口和前缀和

代码随想录算法训练营第12天&#xff1a;滑动窗口和前缀和 这里我参考了西法的博客&#xff0c; 467. 环绕字符串中唯一的子字符串(中等)795. 区间子数组个数(中等)904. 水果成篮(中等)992. K 个不同整数的子数组&#xff08;困难&#xff09;1109. 航班预订统计(中等) 前四…

机器学习周报第36周 AT-LSTM

文章目录 week36 AT-LSTM摘要Abstract一、文献阅读1. 题目2. abstract3. 网络架构3.1 LSTM3.2 注意力机制概述3.3 AT-LSTM3.4 数据预处理 4. 文献解读4.1 Introduction4.2 创新点4.3 实验过程4.3.1 训练参数4.3.2 数据集4.3.3 实验设置4.3.4 实验结果 5. 基于pytorch的transfor…

使用Cesium ion将 Sketchfab 3D 模型添加到您的GIS应用中

您现在可以将 Sketchfab 中的 3D 模型导入 Cesium ion 中以创建 3D 块&#xff0c;从而更轻松地为地理空间体验创建上下文和内容。 Sketchfab 是 Epic Games 的一部分&#xff0c;也是使用最广泛的 3D 资产市场之一。自 2012 年推出以来&#xff0c;已有超过 1000 万用户使用 …

【数据结构】最小生成树(Prim算法、Kruskal算法)解析+完整代码

5.1 最小生成树 定义 对一个带权连通无向图 G ( V , E ) G(V,E) G(V,E)&#xff0c;生成树不同&#xff0c;每棵树的权&#xff08;即树中所有边上的权值之和&#xff09;也可能不同。 设R为G的所有生成树的集合&#xff0c;若T为R中边的权值之和最小的生成树&#xff0c;则T称…

3. uniapp开发工具的一些事

前言 新的一天&#xff0c;又要开始卷起来了&#xff0c;开发程序开发当前离不开开发工具&#xff0c;一个好的开发工具办事起来那必然是事倍功半的...本文主要分享了关于uniapp里开发工具的一些事~ 概述 阅读时间&#xff1a;约5&#xff5e;7分钟&#xff1b; 本文重点&am…

Visual Studio Code基础:打开一个编辑器(文件)时,覆盖了原编辑器

相关阅读 VS codehttps://blog.csdn.net/weixin_45791458/category_12658212.html?spm1001.2014.3001.5482 在使用vscode时&#xff0c;偶尔会出现这样的问题&#xff1a;打开了某个编辑器&#xff08;文件&#xff0c;下面统称文件&#xff09;后&#xff0c;再打开其他文件…

清理Mac电脑中的垃圾文件,让Mac电脑像新的一样好

CleanMyMac是一款流行的Mac系统优化工具&#xff0c;它可以帮助用户清理Mac电脑中的垃圾文件、优化系统性能、管理应用程序、保护隐私和提升电脑运行速度。下面是CleanMyMac的一些主要功能&#xff1a; 系统清理&#xff1a;清除系统缓存、日志文件、语言文件等&#xff0c;释放…

Hotcoin Academy 市场洞察-2024年4月15日-21日

加密货币市场表现 BTC ETF在本周出现净流出&#xff0c;大盘有较大跌幅&#xff0c;BTC一度跌破60000美金&#xff0c;ETH一度跌破2800美金&#xff0c;整体以横盘为主&#xff0c;行情在周末有略微回升趋势。BTC市占率创21年4月来新高&#xff0c;目前市值1.28万亿&#xff0c…

图片浏览工具-Honeyview

一、软件特点 轻量而快速 可以显示包括 GPS 信息在内的 JPEG 格式的 EXIF 信息 对图像格式进行批量转换和调整大小 支持显示 GIF 和 WebP 动图 无需解压即可直接查看压缩包中的图像 二、支持的格式 图像格式: BMP, JPG, GIF, PNG, PSD, DDS, JXR, WebP, J2K, JP2, TGA, TIFF, …

沉浸式翻译 chrome 插件 Immersive Translate - Translate Website PDF

免费翻译网站&#xff0c;翻译PDF和Epub电子书&#xff0c;双语翻译视频字幕 &#x1f4e3; 网络上口碑爆炸的网站翻译扩展工具【沉浸式翻译】⭐⭐⭐⭐⭐ &#x1f4bb; 功能特点如下&#xff1a; &#x1f4f0; 网站翻译 &#x1f680; 提供双语网站翻译&#xff0c;智能识…

web自动化系列-selenium的基本方法介绍

web自动化 &#xff0c;一个老生常谈的话题 &#xff0c;很多人的自动化之路就是从它开始 。它学起来简单 &#xff0c;但做起来又比较难以驾驭 &#xff1b;它的执行效率慢 、但又是最接近于用户的操作场景 &#xff1b; 1.web自动化中的三大亮点技术 我们先聊聊 &#xff0…

登录rabbitMQ管理界面时浏览器显示要求进行身份验证,与此站点连接不安全解决办法

问题描述 最近在黑马学习rabbitMQ的过程中&#xff0c;在使用docker部署好rabbitMQ后&#xff0c;使用账号为&#xff1a;itcast&#xff0c;密码为&#xff1a;123321 登录的时候浏览器显示了这个问题&#xff0c;如图所示&#xff1a; 当时以为自己需要输入自己的浏览…