|
3 | 3 | * @return {boolean}
|
4 | 4 | */
|
5 | 5 | const circularArrayLoop = function(nums) {
|
6 |
| - let n = nums.length; |
7 |
| - for (let i = 0; i < n; i++) { |
8 |
| - if (nums[i] == 0) { |
9 |
| - continue; |
10 |
| - } |
11 |
| - let j = i, k = getIndex(i, nums); |
12 |
| - while (nums[k] * nums[i] > 0 && nums[getIndex(k, nums)] * nums[i] > 0) { |
13 |
| - if (j === k) { |
14 |
| - // check for loop with only one element |
15 |
| - if (j === getIndex(j, nums)) { |
16 |
| - break; |
17 |
| - } |
18 |
| - return true; |
19 |
| - } |
20 |
| - j = getIndex(j, nums); |
21 |
| - k = getIndex(getIndex(k, nums), nums); |
22 |
| - } |
23 |
| - // loop not found, set all element along the way to 0 |
24 |
| - j = i; |
25 |
| - let val = nums[i]; |
26 |
| - while (nums[j] * val > 0) { |
27 |
| - let next = getIndex(j, nums); |
28 |
| - nums[j] = 0; |
29 |
| - j = next; |
| 6 | + let n = nums.length; |
| 7 | + for (let i = 0; i < n; i++) { |
| 8 | + if (nums[i] == 0) { |
| 9 | + continue; |
| 10 | + } |
| 11 | + let j = i, |
| 12 | + k = getNextIndex(i, nums); |
| 13 | + while (nums[k] * nums[i] > 0 && nums[getNextIndex(k, nums)] * nums[i] > 0) { |
| 14 | + if (j === k) { |
| 15 | + // check for loop with only one element |
| 16 | + if (j === getNextIndex(j, nums)) { |
| 17 | + break; |
30 | 18 | }
|
| 19 | + return true; |
| 20 | + } |
| 21 | + j = getNextIndex(j, nums); |
| 22 | + k = getNextIndex(getNextIndex(k, nums), nums); |
| 23 | + } |
| 24 | + // loop not found, set all element along the way to 0 |
| 25 | + j = i; |
| 26 | + let val = nums[i]; |
| 27 | + while (nums[j] * val > 0) { |
| 28 | + let next = getNextIndex(j, nums); |
| 29 | + nums[j] = 0; |
| 30 | + j = next; |
31 | 31 | }
|
32 |
| - return false; |
| 32 | + } |
| 33 | + return false; |
33 | 34 | };
|
34 | 35 |
|
35 |
| - |
36 |
| -function getIndex(i, nums) { |
37 |
| - const n = nums.length; |
38 |
| - return i + nums[i] >= 0? (i + nums[i]) % n: n + ((i + nums[i]) % n); |
| 36 | +function getNextIndex(i, nums) { |
| 37 | + const n = nums.length; |
| 38 | + return i + nums[i] >= 0 ? (i + nums[i]) % n : n + ((i + nums[i]) % n); |
39 | 39 | }
|
0 commit comments