用于检查循环列表中是否存在任何正向路径的程序在 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