//1. 两次遍历
class Solution {
public:
void sortColors(vector<int>& nums) {
int N = nums.size(), cnt0 = 0, cnt1 = 0, cnt2 = 0;
for (int i = 0; i < N; i++) {
if (nums[i] == 0) cnt0++;
else if (nums[i] == 1) cnt1++;
else cnt2++;
}
for (int i = 0; i < cnt0; i++) nums[i] = 0;
for (int i = 0; i < cnt1; i++) nums[i + cnt0] = 1;
for (int i = 0; i < cnt2; i++) nums[i + cnt0 + cnt1] = 2;
}
};
//2. 一次遍历(三路快排的思想)
class Solution {
public:
void sortColors(vector<int>& nums) {
int zero = 0, two = nums.size() - 1;
for (int i = 0; i <= two; i++) {
if (nums[i] == 0) {
swap(nums[zero], nums[i]);
zero++;
}
else if (nums[i] == 2) {
swap(nums[two], nums[i]);
two--;
i--;
}
}
}
};