给定一个无序数组,里面的数字有0/1/2,将其排列成为0.。。。1.。。。2.。。。,只允许遍历一次
//三指针问题
public void sortThreeColors(int [] nums){
int left= 0 ;
int right = nums.length-1;
for(int k = 0 ; k <= right;){
if(nums[k]==1) k++;
else if(nums[k]==0){
//如果k对应的是0应该和左边的left指针交换并均加1,因为k是往右走的
int temp = nums[k];
nums[k]=nums[left];
nums[left]=temp;
left++;k++;
}else{
//如果k对应的是2则要和右边的right指针交换,但是只有right--,k不变
int temp = nums[k];
nums[k] = nums[right];
nums[right] = temp;
right--;
}
}
}