题目:颜色分类
解法一:
先通过一次遍历得到红、白、蓝三个颜色各自的数量,之后再通过一次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}
解法二: