public class CircularArrayLoop {
public boolean circularArrayLoop(int[] nums) {
Set<Integer> set = new HashSet<>();
boolean flag;
for (int i = 0; i < nums.length; i++) {
int j = i;
flag = (nums[i] > 0);
while (true) {
if ((flag && nums[j] > 0) || (!flag && nums[j] < 0)) {
}else {
break;
}
if (set.contains(j)) {
if (nums[j] % nums.length == 0) {
break;
}else {
return true;
}
}
set.add(j);
j = ((j + nums[j]) % nums.length + nums.length) % nums.length;
}
set = new HashSet<>();
}
return false;
}
}
用额外的空间复杂度来判断是否到达了之前到达过的位置。需要把环形数组位置移动的过程强化一下。