力扣75. 颜色分类 题解

力扣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++;
        }
   }
}

猜你喜欢

转载自blog.csdn.net/qq_45836906/article/details/106308671