解法一:思路:两次遍历数组。第一次遍历用一个一维数组统计0、1、2出现的个数。
第二次遍历数组在原有数组上进行赋值。
class Solution {
public:
void sortColors(vector<int>& nums) {
int count[3]={0},t=0;
for(int i=0;i<nums.size();++i) count[nums[i]]++;
for(int i=0;i<=2;++i)
for(int j=0;j<count[i];++j)
{
nums[t++]=i;
}
}
};
解法二:
思路:遍历一次数组。用两个指针分别指向首尾。遍历一次数组,遇到0时,将0向前搬移,遇到2时,向后搬移。因为一共只有三个数,所以可以这样做。遍历一次数组后,数组就可以按0、1、2的顺序排列。
class Solution {
public:
void sortColors(vector<int>& nums) {
int left =0,right=nums.size()-1;
for(int i=0;i<=right;++i)
{
if(nums[i]==0) swap(nums[left++],nums[i]);
else if(nums[i]==2) swap(nums[right--],nums[i--]);
}
}
};