题目:颜色分类

解法一:

先通过一次遍历得到红、白、蓝三个颜色各自的数量,之后再通过一次O(n)的遍历(三个循环的时间复杂度加起来是O(n) )把颜色进行排序

虽然O(2n) = O(n),但这样还是遍历了两次,有没有只需要遍历一次的办法?

 1void sortColors(vector<int>& nums)
 2{
 3    int r = 0, w = 0, b = 0;
 4    for(int num : nums)
 5    {
 6        switch(num)
 7        {
 8            case 0: r++; break;
 9            case 1: w++; break;
10            case 2: b++; break;
11        }
12    }
13    for(int i = 0; i < r; i++) nums[i] = 0;
14    for(int j = r; j < r + w; j++) nums[j] = 1;
15    for(int k = r + w; k < r + w + b; k++) nums[k] = 2;
16}

解法二: