75.Sort Colors 3色のソート

1076 ワード

0,1,2はそれぞれ3色を表す.ソートが必要です.
Example:
Input: [2,0,2,1,1,0]
Output: [0,0,1,1,2,2]

要件:two-passアルゴリズムではなくa passアルゴリズムを使用する.ここでいう2ステップアルゴリズムは,まず0,1,2のcountを統計し,それぞれの数で配列に入れる.
思考:要求を見ていない時、思いついた方法も要求の中で言及したtwo-passアルゴリズムで、更に1歩の策略を考えるのは少し難しくて、solutionの解法を見ました
    
    void sortColors(vector& nums) {
        int high = nums.size() -1;
        int low = 0;
  
        // i     mid
        // low      ,      0   
        // high      ,      2   
        // case: [2, 0, 1],           
        int i = 0;

        //         , i      0, j          ,i        ,  j         2,j <=i ,    j i          ,    1。
        //   i      2 ,i        ,   k         0,           j         
        while(i <= high) {
            if (nums[i] == 2) {
                swap(nums[i], nums[high]);
                --high;
            } else if (nums[i] == 0) {
                swap(nums[i], nums[low]);
                ++low;
                ++i;
            } else {
                ++i;
            }
        }
    }