75. Sort Colors

一、题目

  1、审题

  

  2、分析

    荷兰国旗问题。用 0,1,2 代表颜色,将数组中的所有的 0 排在前面, 1 排在中间,2排在后面。

 

二、解答

  1、思路:

    ①、选用三个指针。 left 与 current 指向下标为 0 的元素; right 指向数组末尾。

    ②、遍历数组,当 current <= right 时:

      当 current 指向元素为 0 时,交换 left、current 的值,同时 left++,current++;

      当 current 指向元素为 1 时,current++;

      当current 指向元素为 2 时,交换 current、right 值,同时 right--

public void sortColors2(int[] nums) {
        
        int len = nums.length;
        if(len < 2)
            return;
        
        int left = 0;
        int right = len - 1;
        int current = 0;
        while(current <= right) {
            if(nums[current] == 0){
                swap(nums, left, current);
                left++;
                current++;
            }
            else if(nums[current] == 1) {
                current++;
            }
            else {
                swap(nums, right, current);
                right--;
            }
        }
    }

 

posted @ 2018-09-22 09:56  skillking2  阅读(109)  评论(0编辑  收藏  举报