题目描述:
方法1:单指针,两次循环,第一次把0移到前面,第二次把1移到前面
class Solution {
public:
void sortColors(vector<int>& nums) {
int n = nums.size();
int pos = 0;
for(int i=0;i<n;i++){
if(nums[i] == 0) swap(nums[i],nums[pos++]);
}
for(int i=0;i<n;i++){
if(nums[i] == 1) swap(nums[i],nums[pos++]);
}
}
};
方法2:双指针p0指向插的0的位置,p1指向插的1的位置
i遍历数组:
如果nums[i]是0,把nums[i]放到p0位置,如果p0原本的是1,再把nums[i]放p1位置,然后p0,p1都加1
如果nums[i]是1,把nums[i]放到p1位置,然后p1加1
class Solution {
public:
void sortColors(vector<int>& nums) {
int n=nums.size();
int p0 = 0;
int p1 = 0;
for(int i=0;i<n;i++){
if(nums[i] == 0){
swap(nums[p0],nums[i]);
if(nums[i] == 1) swap(nums[p1],nums[i]);
p0++;
p1++;
}
else if(nums[i] == 1) swap(nums[p1++],nums[i]);
}
}
};