对数组进行遍历,头尾各一个指针,分别指向已排序的0,2,与未排序的元素进行交换。
需要注意的是当前元素与尾指针指向的元素交换后,要处理该元素,遍历数组的指针不自增。
void sortColors(vector<int>& nums) {
int i = 0, n = nums.size(), j = n-1;
for(int k=0;k<=j;){
if(nums[k]==0){
swap(nums[k++],nums[i++]);
}else if(nums[k]==2){
swap(nums[k],nums[j--]);
}else{
k++;
}
}
}