问题描述:给定一个有n个元素的数组,数组中元素的取值只有0,1,2三种可能。为这个数组排序。
class Solution{
public:
//时间复杂度:O(n)
//空间复杂度:O(1)
//遍历一遍
void sort(vector<int>& nums){
int zero=-1; // nums[0...zero] == 0
int two=nums.size(); //nums[two...n-1] == 2
for(int i=0;i<two;){
if(nums[i]==1) i++;
else if(nums[i]==2) swap(nums[i],nums[--two]);
else { // nums[i] == 0
assert(nums[i]==0);
swap(nums[++zero],nums[i++]);
}
}
}
};