把0和2往两端换。l保存下一个0的位置【可能正好和搜索位置相同,也可能是1】,r保存下一个2的位置
class Solution {
public:
void sortColors(vector<int>& nums) {
int l = 0, r = (int)nums.size() - 1;
for (int i = 0; i <= r;)
if (nums[i] == 0 && l != i) swap(nums[i], nums[l++]);
else if (nums[i] == 2) swap(nums[i], nums[r--]);
else ++i;
}
};