LeetCode 75. 颜色分类

class Solution {
    public void sortColors(int[] nums) {
        // [0,zero) = 0 ; [zero,i) = 1; [two,nums.length - 1] = 2
        //保证循环开始时[0,zero)为空,所以设置zero 为 -1,遍历时先加,后交换
        int zero = -1;
        //未来保证初始化时[two,nums.length - 1] 为空,将two 设置为nums.length,遍历时先减,再交换
        int two = nums.length;
        int i = 0;
        //当i = two 时,上面的三个子区间正好覆盖全部数组,因此循环可以继续的条件是 i < two;
        while(i < two){
            if(nums[i] == 0){
                zero++;
                swap(nums,i,zero);
                i++;
            }else if(nums[i] == 1){
                i++;
            }else{
                two--;
                swap(nums,i,two);
            }
        }
    }
    public void swap(int[] nums,int index1,int index2){
        int tmp = nums[index1];
        nums[index1] = nums[index2];
        nums[index2] = tmp;
    }
}

 

posted @ 2020-11-02 15:47  peanut_zh  阅读(81)  评论(0编辑  收藏  举报