原题题目
代码实现(首刷自解 原谅我看了一天高数偷懒 其他方法知道怎么下手 但懒得写了)
class Solution {
public:
void sortColors(vector<int>& nums) {
sort(nums.begin(),nums.end());
return;
}
};
代码实现(首刷自解 还是写一种解法吧)
class Solution {
public:
void sortColors(vector<int>& nums) {
int size = nums.size(),count0 = 0,count2 = size-1;
vector<int> temp(size,1);
for(int i=0;i<size;++i)
{
if(!nums[i]) temp[count0++] = nums[i];
else if(nums[i] == 2) temp[count2--] = nums[i];
}
nums = temp;
return;
}
};
代码实现(二刷自解 DAY 152 C++)
class Solution {
public:
void sortColors(vector<int>& nums) {
int zeronum = 0,twonum = 0;
for(int i=0;i<nums.size();++i)
{
if(!nums[i]) ++zeronum;
else if(nums[i] == 2) ++twonum;
nums[i] = 1;
}
for(int i=0;i<zeronum;++i) nums[i] = 0;
for(int i=0;i<twonum;++i) nums[nums.size()-1-i] = 2;
}
};
代码实现(二刷大部分看解 一遍遍历 没有用荷兰国旗问题)
class Solution {
public:
void sortColors(vector<int>& nums) {
int i = 0,size = nums.size(),l = 0,r = size-1;
while(i < size && i <= r)
{
auto num = nums[i];
if(num == 0) swap(nums[i++],nums[l++]);
else if(num == 2) swap(nums[i],nums[r--]);
else ++i;
}
return;
}
};
代码实现(三刷自解 荷兰国旗)
class Solution {
public:
void sortColors(vector<int>& nums) {
int zero = 0,two = 0,l = 0,r = nums.size()-1,size = nums.size();
for(const auto& num:nums)
{
if(num == 0) ++zero;
if(num == 2) ++two;
}
for(int i=0;i<size;++i)
nums[i] = 1;
while(zero--) nums[l++] = 0;
while(two--) nums[r--] = 2;
}
};
代码实现(四刷自解 DAY 307 C++ 两遍遍历)
class Solution {
public:
void sortColors(vector<int>& nums) {
int twopos = nums.size() - 1;
for (int i = nums.size() - 1; i >= 0; --i) {
while (nums[i] == 2 && twopos != i) {
swap(nums[twopos--], nums[i]);
}
}
int zeropos = 0;
for (int i = 0; i < nums.size(); ++i) {
while (nums[i] == 0 && zeropos != i) {
swap(nums[zeropos++], nums[i]);
}
}
}
};
代码实现(四刷自解 DAY 307 一遍遍历)
class Solution {
public:
void sortColors(vector<int>& nums) {
int zeropos = 0, twopos = nums.size() - 1;
for (int i = 0; i < nums.size();) {
if (nums[i] == 0 && zeropos != i) {
swap(nums[zeropos++], nums[i]);
} else if (nums[i] == 2 && twopos > i) {
swap(nums[twopos--], nums[i]);
} else {
++i;
}
}
}
};