嘿伙计们我有这个功能,但是当我测试它时它给了我错误。 有没有人对如何修复它有任何想法 这是我的练习。请仔细阅读。
编写一个函数cycleLength(array),它返回形成循环的学生数,假设你从最左边的那个开始。输入数组是非负整数的列表,因此array [m]是学生重定向的学生的编号。没有学生重定向到自己。最左边的学生是0,下一个是1,依此类推。列表中的每个元素都在[0,n-1]范围内,其中n是列表的长度。 例如,假设列表为[1,3,0,1]。然后学生0重定向到学生1,学生1重定向到学生3,重定向回学生1.有一个循环的两个学生:1,3。因此答案将是2.请注意,即使你开始与学生0,他不是循环的一部分。 这是我的功能:
def cycleLength(m):
lst = []
i = 0
while i not in lst:
lst.append(i)
i = int(m[i])
b = len(lst) - lst.index(i)
return b
答案 0 :(得分:3)
你几乎做对了。
>>> def cycleLength(students):
... seen = []
... current = 0
... # Run till we have seen all the students
... while len(seen) != len(students):
... # If the current index has been seen already
... if current in seen:
... return len(seen) - seen.index(current)
... seen.append(current)
... current = students[current]
...
>>> assert(cycleLength([1, 3, 0, 1]) == 2)
>>> assert(cycleLength([1, 3, 0, 2]) is None)
这将处理没有循环的情况。
答案 1 :(得分:1)
def cycleLength(m):
lst = []
for x in m:
if x in lst:
return len(lst) - lst.index(x)
lst.append(x)
return -1
<强>解释强>
m[i]
的元素不在lst
中 - 你在做什么就是在列表中寻找索引而不是“索引处的元素”lst
元素 - 而不是元素的索引 - 否则你将找不到任何这样的“重复”元素 - 因为索引应该只是增加。<强>校正:强>
以前版本的代码有错误,同一个想法的更简单版本,并且也没有错误(我相信),在这里发布。 -1代表“没有找到循环”。