457 Circular Array Loop
457. Circular Array Loop
1. Question
2. Implementation
class Solution {
public boolean circularArrayLoop(int[] nums) {
for (int i = 0; i < nums.length; i++) {
if (nums[i] == 0) {
continue;
}
int slow = i;
int fast = getNext(i, nums);
while (nums[fast] * nums[i] > 0 && nums[getNext(fast, nums)] * nums[i] > 0) {
if (slow == fast) {
if (slow == getNext(slow, nums)) {
break;
}
return true;
}
slow = getNext(slow, nums);
fast = getNext(getNext(fast, nums), nums);
}
slow = i;
while (nums[slow] * nums[i] > 0) {
int next = getNext(slow, nums);
nums[slow] = 0;
slow = next;
}
}
return false;
}
public int getNext(int i, int[] nums) {
int n = nums.length;
return (i + nums[i]) >= 0 ? (i + nums[i]) % n : (i + nums[i] + n) % n;
}
}3. Time & Space Complexity
Last updated