方法一:
直接遍历两次,第一次统计每类数字的个数;第二次依次给数组按统计的个数赋值; 时间复杂度O(n)
方法二:
利用三个指针p0、p1、p2,分别指向第一个不为0、1、2的数。其中,p0、p1从头开始遍历,p2从数组尾开始遍历。第二种比第一种快一倍
如果三个指针中有任何两个可以互换,即:
即p0向了1,同时p1指向了0
或者p0指向了2,p2指向了0
又或者p1指向了2,p2指向了1
如果,以上三种情况均不是那么说说明三个指针各自不同,则可以直接将每个指针的位置赋上相应的值
#include<iostream>
#include<vector>
using namespace std;