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

leetcode hot100刷题日记——28.环形链表2

在这里插入图片描述
在这里插入图片描述

解答:
方法一:哈希表

class Solution {
public:ListNode *detectCycle(ListNode *head) {//哈希表unordered_set<ListNode *>visited;while(head!=nullptr){if(visited.count(head)){return head;}visited.insert(head);head=head->next;}return nullptr;}
};

时间复杂度:O(N)
空间复杂度:O(N)

方法二:快慢指针
在这里插入图片描述

class Solution {
public:ListNode *detectCycle(ListNode *head) {//快慢指针//快指针每次走两步,慢指针每次走一步//假设相遇点是图中紫色点//那么快指针走过的路=a+(b+c)*n+b=a+(n+1)*b+n*c//慢指针走过的路=a+b//快指针走过的路一定是慢指针的两倍//2a+2b=a+(n+1)*b+n*c//a=(n-1)b+nc//由于b+c是环长,所以a=(b+c)(n-1)+c//也就是说,相遇点和入环点之间的距离c+n-1圈环长,也就是从链表头到入环点的距离//我们找到slow和fast指针相遇的时候很容易(slow==fast)//这个时候如果再设置一个指针temp在表头,和慢指针同时每次走一步,那么temp和慢指针相遇的地方就在入环点ListNode *fast=head,*slow=head;while(fast&&fast->next){slow=slow->next;fast=fast->next->next;if(slow==fast){ListNode *temp=head;while(temp!=slow){slow=slow->next;temp=temp->next;}return temp;}}return nullptr;}
};

时间复杂度:O(N)
空间复杂度:O(1)

相关文章:

  • idea本地git上传gitee码云失败分析,push rejected+git手动融合
  • 设计模式-发布订阅
  • 工厂模式 vs 策略模式:设计模式中的 “创建者” 与 “决策者”
  • spark shuffle的分区支持动态调整,而hive不支持
  • Kubernetes面试题(基础向)
  • unity星空运动
  • Linux | Shell脚本的基础知识
  • ai如何绘制mg人物的睫毛
  • 求满足target的最小窗口的长度,滑动窗口法,双指针
  • 【Ubuntu远程桌面】
  • NanoGPT的BenchMarking.py
  • 2021年江西工业互联网大赛———恶意app分析
  • VL 中间语言核心技术架构:构建全链路开发生态
  • 食材走T台?Coze+即梦应用实例:实现一键生成食材走秀视频!!(附提示词)
  • kafka学习笔记(三、消费者Consumer使用教程——使用实例及及核心流程源码讲解)
  • Docker 部署项目
  • 挡片/测试晶圆(Dummy Wafer)通俗解析
  • UI自动化测试的革新,新一代AI工具MidScene.js实测!
  • K8S集群主机网络端口不通问题排查
  • 滚珠导轨:电子制造“纳米级”精度的运动基石
  • 微信公众号登录入口手机版/新媒体seo指的是什么
  • 电子商务网站优点/东莞网站seo优化托管
  • 给别人做网站别人违法经营/管理课程培训
  • 佛山做网站公司有哪些/北京建公司网站价格
  • 投资企业网站备案要前置认证/交易平台官网
  • 花钱做网站注意些什么/淘宝营销推广方案