142. 環形鏈表 II + 287. 尋找重複數

142. 環形鏈表 II

給定一個鏈表,返回鏈表開始入環的第一個節點。 如果鏈表無環,則返回 null

快慢指針走到相等,然後再從頭節點,慢節點一起走,一直走到相交的地方

class Solution:
    def detectCycle(self, head: ListNode) -> ListNode:
        slow,fast = head,head

        while fast and fast.next:
            fast = fast.next.next
            slow = slow.next

            if fast==slow:
                p=head
                while p!=slow:
                    p=p.next
                    slow=slow.next
                return slow
        return 

 

287. 尋找重複數

給定一個包含 n + 1 個整數的數組 nums,其數字都在 1 到 n 之間(包括 1 和 n),可知至少存在一個重複的整數。假設只有一個重複的整數,找出這個重複的數。

把數組轉換成上面的有環鏈表來求,肯定有環

class Solution:
    def findDuplicate(self, nums: List[int]) -> int:
        slow,fast = nums[0],nums[nums[0]]

        while slow!=fast:
            slow = nums[slow]
            fast = nums[nums[fast]]

        p = 0
        while slow != p:
            slow = nums[slow]
            p = nums[p]

        return slow

 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章