457. 環形陣列是否存在迴圈

WrRan發表於2024-09-12
題目連結 457. 環形陣列是否存在迴圈
思路 思維題-快慢指標
題解連結 【負雪明燭】動畫題解:快慢指標
關鍵點 1. 將題意中移動規則抽象為nextpos 2. 限制條件的檢查:同號 且 迴圈節點數量大於\(1\) 3. 鴿巢原理:只需要迴圈\(n\)
時間複雜度 \(O(n)\)
空間複雜度 \(O(1)\)

程式碼實現:

class Solution:
    def circularArrayLoop(self, nums: List[int]) -> bool:
        n = len(nums)

        def nextpos(i):
            return (i + nums[i] + n) % n
        
        for i, num in enumerate(nums):
            slow, fast = i, nextpos(i)
            while nums[fast] * nums[slow] > 0 and nums[nextpos(fast)] * nums[slow] > 0:
                if fast == slow:
                    if slow == nextpos(slow):
                        break
                    return True
                slow = nextpos(slow)
                fast = nextpos(nextpos(fast))
        
        return False

相關文章