【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,一经查实,立即删除!

相关文章

代谢组数据分析四:功能分析

Functional Analysis 代谢物通路包含了基因、催化酶或代谢物等上下游关系的先验知识,通过将关心的代谢物比对到通路上,再根据如超级几何分析等数学方法计算受影响的代谢物是否能够影响通路。 代谢物富集分析的目的是为了解析某些差异代谢物是否落在某些pathway上(可简单理…

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; 相关免费源码资源 乐优商城…

SpringBoot JPA使用

SpringBoot JPA使用 简介 Spring Data JPA 是 Spring 框架提供的一个模块&#xff0c;用于简化与关系型数据库的交互和数据访问。它基于JPA&#xff08;Java Persistence API&#xff09;标准&#xff0c;并提供了一组易于使用的API和工具&#xff0c;帮助开发人员更轻松地进…

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

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

(学习日记)2024.04.30:UCOSIII第五十四节:User文件夹函数概览(uCOS-III->Ports文件夹)

之前的章节都是针对某个或某些知识点进行的专项讲解,重点在功能和代码解释。 回到最初开始学μC/OS-III系统时,当时就定下了一个目标,不仅要读懂,还要读透,改造成更适合中国宝宝体质的使用方式。在学完野火的教程后,经过几经思考,最后决定自己锦上添花,再续上几章。 这…

Linux深入学习 - 进程

目录 进程描述符 标识一个进程 进程组织 进程之间的关系 如何组织进程 等待队列 进程资源限制 进程切换 硬件上下文 switch_to宏 创建进程 do_fork 内核进程 撤销有一个进程 do_group_exit do_exit函数 Reference 下面开始讨论一个非常重要的抽象&#xff1a;…

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

黑烟车智能电子抓拍系统大幅度节约人力物力&#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…

从零学算法1017

1017. 负二进制转换 给你一个整数 n &#xff0c;以二进制字符串的形式返回该整数的 负二进制&#xff08;base -2&#xff09;表示。 注意&#xff0c;除非字符串就是 “0”&#xff0c;否则返回的字符串中不能含有前导零。 示例 1&#xff1a; 输入&#xff1a;n 2 输出&…

ORAN每个端点和每个C平面消息的限制

O-RU每个端点的处理限制 当O-RU的处理粒度是基于端点的&#xff0c;即&#xff0c;在O-RU中处理C/U平面消息的处理资源被分配给每个端点时&#xff0c;O-RU可以对每个端点施加特定限制&#xff0c;例如&#xff0c;endpoint-section-capacity、endpoint-beam-capacity、endpoi…

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. 航班预订统计(中等) 前四…

C++ map自定义比较函数遵守严格弱序

问题背景及定位 背景&#xff1a;这个问题是在将tablesaw&#xff08;一个Java的数据处理项目&#xff09;迁移到C时出现的。 问题位置&#xff1a;SplitOn()函数&#xff0c;在数据流水线中的aggregate阶段。 问题描述&#xff1a;使用google/benchmark进行了批量化的性能测…

机器学习周报第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…

asp.net表单上传文件

asp.net表单上传文件 可以用自己的主机搭建服务器环境测试 1.借鉴文章&#xff1a; 原文链接&#xff1a;http://www.cnblogs.com/gxwang/p/4883902.html 2.html端示例代码&#xff0c; 文件名为index.aspx <% Page Language"C#" AutoEventWireup"true…

IDEA那些牛X的插件

activate-power-mode&#xff1a;代码震动效果 Easy JavaDoc&#xff1a;帮你写注释 EASY Code&#xff1a;帮你生成mapper之类的代码 Generate O2O&#xff1a;帮你生成两个类之间复制的代码 GitToolBox&#xff1a;Git工具 IDE Eval Reset&#xff1a;懂得都懂 Java Be…

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

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