class Solution {
public:
bool circularArrayLoop(vector<int>& nums) {
int N = nums.size();
if(N < 2) return false;
int V[N];
int loc;
int cnt;
memset(V, 0, sizeof(V));
cnt = 0;
for(int i=0; i<N; i++){
if(V[i] == 0 && nums[i] > 0 ) {
cnt++;
loc = i;
while( V[loc] == 0 && nums[loc] > 0 ){
V[loc] = cnt;
loc = (loc + nums[loc]) % N;
}
if( nums[loc] < 0 || nums[loc]%N == 0 || V[i] != V[loc] ){
continue;
}
return true;
}
}
memset(V, 0, sizeof(V));
cnt = 0;
for(int i=0; i<N; i++){
if(V[i] == 0 && nums[i] < 0 ) {
loc = i;
cnt ++;
while( V[loc] == 0 && nums[loc] < 0 ){
V[loc] = cnt;
loc = (loc + nums[loc] + 1000*N) % N;
}
if( nums[loc] > 0 || (-nums[loc])%N == 0 || V[i] != V[loc] ){
continue;
}
return true;
}
}
return false;
}
};