Leetcode 457 Solution
This article provides solution to leetcode question 457 (circular-array-loop)
Access this page by simply typing in "lcs 457" in your browser address bar if you have bunnylol configured.
Leetcode Question Link
https://leetcode.com/problems/circular-array-loop
Solution
class Solution {
vector<int>* pnums;
public:
int next(int i)
{
return (i + (*pnums)[i] + (*pnums).size()) % (*pnums).size();
}
bool circularArrayLoop(vector<int>& nums) {
if (nums.size() == 0)
return false;
pnums = &nums;
for (int i = 0; i < nums.size(); i++)
{
if (nums[i] == 0)
continue;
int slow = i;
int fast = i;
while (nums[fast] * nums[next(fast)] > 0 && nums[next(fast)] * nums[next(next(fast))] > 0)
{
slow = next(slow);
fast = next(next(fast));
if (slow == fast)
{
if (slow == next(slow))
break;
printf("%d\n", slow);
return true;
}
}
slow = i;
while (nums[i] * nums[next(i)] > 0)
{
nums[i] = 0;
i = next(i);
}
}
return false;
}
};