采用双指针法,p0维护数字0,p1维护数字1。遇到1时,交换并且p1加1,遇到0时,交换并观察0的指针是不是小于1的指针,如果小于,那么之前0指针指向的数据1会被交换出去,所以要进一步进行交换。
注:两个指针都是在数据0或者数据1末尾的后一个位置。
class Solution {
public:
void sortColors(vector<int>& nums) {
int p0=0;
int p1=0;
int len=nums.size();
for(int i=0;i<len;i++)
{
if(nums[i]==1)
{
swap(nums[i],nums[p1]);
p1++;
}
else if(nums[i]==0)
{
swap(nums[i],nums[p0]);
if(p0<p1)
{
swap(nums[i],nums[p1]);
}
p1++;
p0++;
}
}
}
};