假设我们有一个数字列表,称为A,另一个数字为k,我们必须制作一组新的可能元素{A [k],A [A [k]],A [A [A [k]]],...。 ..}在索引不足之前停止。我们必须找到该集合的大小,否则当存在一个循环时为-1。
因此,如果输入像A = [1,2,3,4,5,6,7],k = 1,则输出将是6,因为A [1] = 2,A [2] = 3, A [3] = 4,A [4] = 5,A [5] = 6,A [6] = 7,所以集合为{2,3,4,5,6,7},集合的大小为6。
为了解决这个问题,我们将遵循以下步骤-
看过:=一套新的
当k <A的大小时
返回-1
如果看到A [k],则
将A [k]插入可见
k:= A [k]
看到的返回大小
让我们看下面的实现以更好地理解-
class Solution: def solve(self, A, k): seen = set() while k < len(A): if A[k] in seen: return -1 seen.add(A[k]) k = A[k] return len(seen) ob = Solution()print(ob.solve([1,2,3,4,5,6,7], 1))
[1,2,3,4,5,6,7], 1
输出结果
6