解题思路:从左向右遍历,同时维护两个指针r和b,0~r位置上的元素为0,b~n-1位置上的为2。在遍历过程中,碰到0,放到r的位置;碰到2,放到b的位置;同时移动对应指针。
class Solution {
public:
void sortColors(vector<int>& nums) {
int r = 0, b = nums.size() - 1;
for (int i = 0; i <= b; i++) {
while (nums[i] != 1) {
if (nums[i] == 2) {
if (i > b) break;
swap(nums[b--], nums[i]);
}
if (nums[i] == 0) {
if (i < r) break;
swap(nums[r++], nums[i]);
}
}
}
}
};