当前位置: 首页 > news >正文

vector快慢指针+例题详解

1.快慢指针


例题
给定一个链表,判断链表中是否有环。

如果链表中有某个节点,可以通过连续跟踪 next 指针再次到达,则链表中存在环。 为了表示给定链表中的环,我们使用整数 pos 来表示链表尾连接到链表中的位置(索引从 0 开始)。 如果 pos 是 -1,则在该链表中没有环。注意:pos 不作为参数进行传递,仅仅是为了标识链表的实际情况。

如果链表中存在环,则返回 true 。 否则,返回 false 。

进阶:

你能用 O(1)(即,常量)内存解决此问题吗?

示例 1:

输入:head = [3,2,0,-4], pos = 1
输出:true
解释:链表中有一个环,其尾部连接到第二个节点。

示例 2:

输入:head = [1,2], pos = 0
输出:true
解释:链表中有一个环,其尾部连接到第一个节点。

示例 3:

提示:

    链表中节点的数目范围是 [0, 104]
    -105 <= Node.val <= 105
    pos 为 -1 或者链表中的一个 有效索引 。

来源:力扣(LeetCode)
链接:https://leetcode-cn.com/problems/linked-list-cycle

2.思路

设置一快一慢指针,如果快指针追上慢指针,则有环。如果快指针到达链表尾,说明无环。

/*** 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) {if(head==nullptr||head->next==nullptr)return false;ListNode * slow = head;ListNode * fast = slow->next;while(fast!=slow){if(fast==nullptr||fast->next==nullptr)return false;slow = slow->next;fast = fast->next->next;}return true;}
};

3.相似例题

以下本质为快慢指针

26. 删除有序数组中的重复项 - 力扣(LeetCode)

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

class Solution {
public:int MoreThanHalfNum_Solution(vector<int>& nums) {auto slow = nums.begin();auto fast = nums.end();int flag = 0;for (slow = nums.begin(); slow < nums.end(); slow++){flag = 0;for (fast = nums.begin(); fast < nums.end(); fast++){if (*fast == *slow){flag++;}}if(flag > nums.size()/2){return *slow;}}return 0;}
};

 优质文章推荐:双指针算法详解(快慢指针、对撞指针、滑动窗口)_滑动窗口和双指针算法-CSDN博客

http://www.lryc.cn/news/509502.html

相关文章:

  • 重温设计模式--1、组合模式
  • 单片机:实现SYN6288语音播报(附带源码)
  • cookie,session,token 的区别
  • 基于OpenAI Whisper AI模型自动生成视频字幕:全面解析与实战指南
  • 物理学天空的两朵乌云——量子论与相对论
  • 聚类之轮廓系数
  • Jenkins 构建流水线
  • RTK部分模糊度固定测量流程图
  • 力扣-数据结构-2【算法学习day.73】
  • 操作系统导论读书笔记
  • 基于3D-Speaker进行区分说话人项目搭建过程报错记录 | 通话录音说话人区分以及语音识别 | 声纹识别以及语音识别 | pyannote-audio
  • 如何使用流式渲染技术提升用户体验
  • 【接口自动化连载】使用yaml配置文件自动生成接口case
  • 前端安全 常见的攻击类型及防御措施
  • 来道面试题——CopyOnWriteArrayList
  • 【Rust自学】5.1. 定义并实例化struct
  • React 生命周期完整指南
  • python中os._exit(0) 强制关闭进程后来杀死线程
  • LeetCode:257. 二叉树的所有路径
  • RSICV国产芯片之CHV208
  • 理解神经网络
  • Android 之 List 简述
  • 设计模式の中介者发布订阅备忘录模式
  • 云手机群控能用来做什么?
  • fpgafor循环语句使用
  • 【FastAPI】BaseHTTPMiddleware类
  • Solon v3.0.5 发布!(Spring 可以退休了吗?)
  • 网络安全攻防演练中的常见计策
  • SD卡模块布局布线设计
  • Flask-----SQLAlchemy教程