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

news/2024/5/12 9:32:36

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.mrgr.cn/p/47770658

相关文章

MySQL/MariaDB 如何查看当前的用户

MySQL 的所有数据库用户信息是存储在 user 数据表中的。 可以在登录成功数据后运行 SQL&#xff1a; MariaDB [(none)]> select user,host from user;就可以查看到数据中的所有用户信息。 MariaDB [(none)]> select user,host from user; ERROR 1046 (3D000): No databa…

开源相机管理库Aravis例程学习(五)——camera-api

本文针对Aravis官方例程中的:03-camera-api做简单的讲解目录简介例程代码函数说明arv_camera_get_regionarv_camera_get_pixel_format_as_stringarv_camera_get_pixel_formatARV_PIXEL_FORMAT_BIT_PER_PIXEL 简介 本文针对官方例程中的:03-camera-api做简单的讲解。并介绍其中…

Java基础_集合类_List

List Collection、List接口1、继承结构2、方法 Collection实现类1、继承结构2、相关类&#xff08;1&#xff09;AbstractCollection&#xff08;2&#xff09;AbstractListAbstractSequentialList&#xff08;子类&#xff09; 其它接口RandomAccess【java.util】Cloneable【j…

MySQL三大日志(binlog,redolog,undolog)详解

转发https://segmentfault.com/a/1190000041758784 一、MySQL日志 MySQL日志主要包括错误日志、查询日志、慢查询日志、事务日志、二进制日志几大类。其中比较重要的就是二进制日志binlog(归档日志)、事务日志redo log(重做日志)和undo log(回滚日志)。 日志关系如下图:…

物联网实战--平台篇之(一)架构设计

本项目的交流QQ群:701889554 物联网实战--入门篇https://blog.csdn.net/ypp240124016/category_12609773.html 物联网实战--驱动篇https://blog.csdn.net/ypp240124016/category_12631333.html 一、平台简介 物联网平台这个概念比较宽&#xff0c;大致可以分为两大类&#x…

macOS打开程序提示文件已损坏

macOS打开程序提示文件已损坏解决方案 因为macOS有一个校验机制,如果打开程序提示文件已损坏,你需要使用终端,输入codesign --force --deep --sign - "这里拖入程序" 如果遇到macOS已阻止XXXX程序打开,因为它来自未经验证的开发者,你需要进入设置,安全性和隐私…

QAnything 与 OpenCloudOS 联合打造操作系统 AI 问答解决方案

由网易有道开源的AI知识库问答平台QAnything 1.4.0版本正式发布,并集成到OpenCloudOS操作系统中,为OpenCloudOS用户提供了一键部署AI知识问答库的能力。导语:4 月 26 日,由网易有道开源的 AI 知识库问答平台 QAnything 发布 1.4.0 版本,并集成到 OpenCloudOS 操作系统中,…

揭示C++设计模式中的实现结构及应用——行为型设计模式

简介 行为型模式&#xff08;Behavioral Pattern&#xff09;是对在不同的对象之间划分责任和算法的抽象化。 行为型模式不仅仅关注类和对象的结构&#xff0c;而且重点关注它们之间的相互作用。 通过行为型模式&#xff0c;可以更加清晰地划分类与对象的职责&#xff0c;并…

揭秘JavaScript数据世界:一文通晓基本类型和引用类型的精髓!

在编程的世界里,数据是构建一切的基础。就像建筑师需要了解不同材料的强度和特性一样,程序员也必须熟悉各种数据类型。 今天,我们就来深入探讨JavaScript中的数据类型,看看它们如何塑造我们的代码世界。 一、JavaScript数据类型简介 数据类型是计算机语言的基础知识,数据类…

实时通讯技术 WebRTC 介绍

WebRTC WebRTC&#xff08;Web Real-Time Communication&#xff09;是一个支持网页浏览器进行实时语音对话或视频对话的技术。 历史 2010年5月&#xff0c;Google以6820万美元收购VoIP软件开发商Global IP Solutions的GIPS引擎&#xff0c;并改为名为“WebRTC”。WebRTC使用…

MUR1060D-ASEMI开关电源专用MUR1060D

MUR1060D-ASEMI开关电源专用MUR1060D编辑:ll MUR1060D-ASEMI开关电源专用MUR1060D 型号:MUR1060D 品牌:ASEMI 封装:TO-252 正向电流(IF):10A 反向电压(VRRM):600V 正向电压(VF):1.30V 工作温度:-55C~150C 恢复时间:35ns 芯片个数:1 引脚数量:4 芯片尺寸:86mi…

冰箱主控 32位MCU,多通道、高精度的AD采样配合温度传感器,实现冰箱各温室的精确控温;低功耗设计

概览 小华高性价比32位MCU&#xff0c;多通道、高精度的AD采样配合温度传感器&#xff0c;实现冰箱各温室的精确控温&#xff1b;低功耗设计&#xff0c;绿色低碳、节能环保&#xff1b;模块化设计&#xff0c;充分利用丰富的通讯接口&#xff0c;使主控板、显示板和驱动板灵活…

HNU-数据库系统-甘晴void学习感悟

前言 过程坎坷&#xff0c;终局满意。 感觉是学懂了知识&#xff0c;并且拿到了分数这样的学科。 【先把这个位置占下来&#xff0c;之后有时间再补充】 教材如下&#xff1a; 总领 有点忘记了&#xff0c;可参考当时记录的笔记&#xff1a; 数据库系统-甘晴void学习笔记-…

五•一颂|广州流辰信息致敬每一个辛勤的劳动者,祝大家五一快乐!

正值五一国际劳动节来临之际,广州流辰信息感恩这个伟大的时代,致敬每一个辛勤劳动的劳动者们,并向大家致以节日的问候与祝福,祝大家:阖家团圆、幸福安康、节日快乐!时光飞逝,一年一度的五一国际劳动节如期而至。在这个竞争激烈的社会中,拥有勤劳品质的人儿总会在适当的…

系统目录结构

名称 详情/bin 是 Binaries (二进制文件) 的缩写, 这个目录存放着最经常使用的命令/boot 这里存放的是启动 Linux 时使用的一些核心文件,包括一些连接文件以及镜像文件/dev 是 Device(设备) 的缩写, 该目录下存放的是 Linux 的外部设备,在 Linux 中访问设备的方式和访问文件的…

统计建模——模型——python为例

统计建模涵盖了众多数学模型和分析方法&#xff0c;这些模型和方法被广泛应用于数据分析、预测、推断、分类、聚类等任务中。下面列举了一些常见的统计建模方法及其具体应用方式&#xff1a; 目录 1.线性回归模型&#xff1a; ----python实现线性回归模型 -------使用NumPy…

企业架构管控的探索与实践

当前,传统的组织结构和信息系统已经难以满足企业的发展需求,众多企业面临着数字化转型战略落地难、信息孤岛、系统集成度低和互操作性低等问题,导致业务流程不畅、资源浪费和效率低下。 为此,企业需要一种能够全面描述和分析现状,并能对企业做出合理诊断和规划的方法。企业…

学习笔记448—“消失”5个月后,她回来了!

消失了5个月后,张雪终于有消息了, 去了广发基金。 昨天,广发基金官宣了这一消息。在广发基金,张雪管的是“广发价值回报”, 目前就管了这一只基金,昨天(3月15日)才开始管。 这只基金规模不大,A类、C类份额加在一起也就2.08亿元,约等于张雪离任前管理规模的1%。 不过以…

Go-Zero微服务快速入门和最佳实践(一)

前言 并发编程和分布式微服务是我们Gopher升职加薪的关键。 毕竟Go基础很容易搞定,不管你是否有编程经验,都可以比较快速的入门Go语言进行简单项目的开发。 虽说好上手,但是想和别人拉开差距,提高自己的竞争力,搞懂分布式微服务和并发编程还是灰常重要的,这也是我今年更新…

一款小巧精美的浏览器必备工具(支持Chrome,Edge)

一键清洁大师:专业的浏览器数据清理工具;超美动画,炫酷特效,让清理垃圾数据变得更有趣;一键清理多种缓存、历史记录、下载内容、表单、Cookies、密码、本地存储、本地数据库等。下载地址: https://chromewebstore.google.com/detail/%E4%B8%80%E9%94%AE%E6%B8%85%E6%B4%8…