CodeCollection2018
8/23/2019 - 2:32 AM

荷兰三色旗或者红白蓝排序问题

给定一个无序数组,里面的数字有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--;
    }
  }
}