题目描述:题解一:计数填充法123456789101112131415161718192021222324252627282930class Solution {public: void sortColors(vector<int>& nums) { //分别计算出0 1 2的个数,在使用其个数进行填充即可 int zero = 0; int one = 0; int two = 0; for(int i = 0; i < nums.size(); ++i){ if(nums[i] == 0){ ++zero; } else if(nums[i] == 1){ ++one; } else{ ++two; } } int k = 0; while(k < zero){ nums[k++] = 0; } while(k < zero + one){ nums[k++] = 1; } while(k < nums.size()){ nums[k++] = 2; } }};题解二:单指针12345678910111213141516171819202122class Solution {public: void sortColors(vector<int>& nums) { int size = nums.size(); if(size <= 1) return; int ptr = 0; //将所有的0放在前面 for(int i = 0; i < size; ++i){ if(nums[i] == 0){ swap(nums[ptr], nums[i]); ++ptr; } } //将所有的1放在中间 for(int i = ptr; i < size; ++i){ if(nums[i] == 1){ swap(nums[ptr], nums[i]); ++ptr; } } }};