题目:原题链接(中等)

标签:数组、双指针

解法 时间复杂度 空间复杂度 执行用时
Ans 1 (Python) O ( N ) O(N) O(N) O ( N ) O(N) O(N) 460ms (33.64%)
Ans 2 (Python)
Ans 3 (Python)

解法一:

class Solution:
    def circularArrayLoop(self, nums: List[int]) -> bool:
        visited = set()
        for i1, num in enumerate(nums):
            if i1 in visited:
                continue
            flag1 = 1 if nums[i1] > 0 else -1
            circle = set()
            i2 = i1
            while i2 not in circle:
                flag2 = 1 if nums[i2] > 0 else -1
                if flag1 != flag2:
                    break
                circle.add(i2)
                i2 = (i2 + nums[i2]) % len(nums)
            else:
                if len(circle) != 1 and i2 != (i2 + nums[i2]) % len(nums):  # 进入单个数字的循环
                    return True
            visited &= circle
        return False