一个整形数组,存储的是下一跳的位置,就像指针一样。
比如A[0]=2 A[1]=3 A[2]=1 A[3]=1 A[4]=3
就这么跳:0 2 1 3 1 3...,于是找到了一个loop,长度为2,由1、3这两个元素组成。
题目就是给出这样的数组,返回loop长度。
比如A[0]=2 A[1]=3 A[2]=1 A[3]=1 A[4]=3
就这么跳:0 2 1 3 1 3...,于是找到了一个loop,长度为2,由1、3这两个元素组成。
题目就是给出这样的数组,返回loop长度。
要求O(N) time,O(1) space.
int findLoop(int* arr, int arrLen, int pos) {
if (pos < 0 || pos >= arrLen) {
return -1; // invalid pos
}
int ptr1 = pos; // one step ptr
int ptr2 = pos; // two step ptr
do {
// validate ptr1 and ptr2 here
ptr1 = *(arr + ptr1);
ptr2 = *(arr + ptr2);
ptr2 = *(arr + ptr2);
} while (ptr1 != ptr2);
int length = 0;
do {
ptr1 = *(arr + ptr1);
length++;
} while (ptr1 != ptr2);
return length;
}