1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28
| class Solution { public: bool circularArrayLoop(vector<int>& nums) { int n = nums.size(), Base = 10000; for (int i = 0; i < n; i++) { int last = -1; int k = i; int t = nums[i] > 0; int S = Base + i; do { int p = ((k + nums[k]) % n + n) % n; last = nums[k]; nums[k] = S; k = p; } while (k != i && nums[k] < Base && (t ^ (nums[k] > 0)) == 0); if (last % n && nums[k] == S) return true; } return false; } };
|