Circular Array Cycle
bool has_cycle(vector<int> &ar)
{
vector<bool> visited(ar.size());
auto next_index = [&](int index) {
int target = index + ar[index];
if (target < 0) {
int num_times_till_pos = abs(ceil(target / ar.size()));
target += (num_times_till_pos * ar.size());
}
return target % ar.size();
};
int iter = next_index(0);
for (int i = 0; i < ar.size(); i++) {
if (visited[iter] == true) return false;
visited[iter] = true;
iter = next_index(iter);
}
for (bool b : visited) {
if (!b) return false;
}
return true;
}Last updated