本文主要是介绍Floyd 判圈算法学习:Leetcode142. 环形链表 II,Leetcode287. 寻找重复数,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!
这里写目录标题
- Leetcode142. 环形链表 II
- 题目描述
- 代码
- Leetcode287. 寻找重复数
- 题目描述
- 代码
Leetcode142. 环形链表 II
题目描述
给定一个链表的头节点 head ,返回链表开始入环的第一个节点。 如果链表无环,则返回 null。
如果链表中有某个节点,可以通过连续跟踪 next 指针再次到达,则链表中存在环。 为了表示给定链表中的环,评测系统内部使用整数 pos 来表示链表尾连接到链表中的位置(索引从 0 开始)。如果 pos 是 -1,则在该链表中没有环。注意:pos 不作为参数进行传递,仅仅是为了标识链表的实际情况。
不允许修改 链表。
代码
# Definition for singly-linked list.
# class ListNode:
# def __init__(self, x):
# self.val = x
# self.next = Noneclass Solution:def detectCycle(self, head: Optional[ListNode]) -> Optional[ListNode]:s_node = headf_node = headmeet_flag = Falsewhile(f_node and f_node.next and f_node.next.next):f_node = f_node.next.nexts_node = s_node.nextif(s_node == f_node):f_node = headmeet_flag = Truebreakif(not meet_flag): return Nonewhile(s_node != f_node):f_node = f_node.nexts_node = s_node.nextreturn f_node
Leetcode287. 寻找重复数
题目描述
给定一个包含 n + 1 个整数的数组 nums ,其数字都在 [1, n] 范围内(包括 1 和 n),可知至少存在一个重复的整数。
假设 nums 只有 一个重复的整数 ,返回 这个重复的数 。
你设计的解决方案必须 不修改 数组 nums 且只用常量级 O(1) 的额外空间。
代码
class Solution:def findDuplicate(self, nums: List[int]) -> int:slow_node = 0fast_node = 0# floyd判圈算法,由于一定存在圈,作变化while(True):slow_node = nums[slow_node]fast_node = nums[nums[fast_node]]if(fast_node == slow_node):fast_node = 0breakwhile(fast_node != slow_node):slow_node = nums[slow_node]fast_node = nums[fast_node]return fast_node
这篇关于Floyd 判圈算法学习:Leetcode142. 环形链表 II,Leetcode287. 寻找重复数的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!