用于检查循环列表中是否存在任何正向路径的程序在 Python 中
假设我们有一个名为nums的循环列表。所以第一个和最后一个元素是邻居。因此,从任何索引开始,比如i,如果nums[i]是正值,我们可以向前移动nums[i]个步骤,否则如果它是负值,则向后移动。我们必须检查是否存在长度大于1的循环,使得路径只向前或只向后。
所以,如果输入像nums=[-1,2,-1,1,2],那么输出将为True,因为有一个前向路径[1->3->4->1]
示例
让我们看看以下实现以获得更好的理解-
def solve(nums): n = len(nums) if n == 0: return False seen = [0]*n nums = [x % n for x in nums] iter = 0 for i in range(n): if nums[i] == 0: continue iter += 1 pos = True neg = True curr = i while True: if nums[curr] and seen[curr] == iter: return True if seen[curr] : break if nums[curr] > 0: neg = False else: pos = False if not neg and not pos: break seen[curr] = iter curr = (curr + nums[curr] + n) % n if nums[curr] == 0: break return False nums = [-1, 2, -1, 1, 2] print(solve(nums))
输入
[-1, 2, -1, 1, 2]输出结果
True