力扣75. 颜色分类
想法:使用常数空间的一趟扫描算法。定义三个指针left,right,p。left作为左端点,right作为右端点,p初始值为0,移动p对nums[p]进行判断,为0则与nums[left]交换,交换后p++,left++ 。为2,则与nums[right]进行交换,注意这里不能交换完就p++ ,因为原本的nums[right]并未做出判断,交换后则需要再进行判断,随后进行相应的自加。
代码:
void sortColors(int* nums, int numsSize){
int left = 0, right = numsSize - 1;
int p = 0, t;
while(p <= right) {
if(nums[p] == 0) {
t = nums[left];
nums[left++] = nums[p];
nums[p++] = t;
} else if(nums[p] == 2) {
t = nums[right];
nums[right--] = nums[p];
nums[p] = t;
} else {
p++;
}
}
}