双指针 O(n) time O(1) space
题目要求one-pass,所以从头开始往后扫,遇到0往前放,遇到2往后放
i0的左边都是0,i2的右边都是2
1 2 3 4 5 6 7 8 9 10 11 12 13 14
| class Solution { public: void sortColors(vector<int>& nums) { int n = nums.size(); int i0 = 0, i2 = n - 1; for (int i = 0; i <= i2; ++i) { if (nums[i] == 0) { swap(nums[i], nums[i0++]); } else if (nums[i] == 2) { swap(nums[i--], nums[i2--]); } } } };
|