leetcode 75 Sorted Colors

两种解法

1)记录0和1的个数

然后按照记录的个数将0和1重新放入原数组,剩下的补2

 

2)双指针left,right

left表示0~left-1都为0,即i之前都为0

right表示right+1~nums.length都为2,即j之后都为2

遍历原数组

  a)遇到为0的就把当前nums[i]与nums[left]交换

  b)遇到为2的就交换nums[i]&nums[right],注意,写代码的时候要考虑交换过来的nums[right]有可能是2,如果i正常迭代变成i+1,漏掉了nums[right]为2的情况,所以我们这里i要减1

那么为什么前面a)不需要i减一呢?因为按照我们对left的定义,nums[left]不可能为0

 

 1 class Solution {
 2     public void sortColors(int[] nums) {
 3         int len = nums.length;
 4         int index=0, i=0, j=len-1;
 5         
 6         while(index <= j){
 7             if(nums[index] == 0){
 8                 nums[index] = nums[i];
 9                 nums[i++] = 0;
10             }
11             
12             if(nums[index] == 2){
13                 nums[index] = nums[j];
14                 nums[j--] = 2;
15                 index--;
16             }
17             index++;
18         }
19         
20     }
21 }

 

posted @ 2019-05-26 14:19  南山南北秋悲  阅读(156)  评论(0)    收藏  举报