题目链接
力扣(LeetCode)官网 - 全球极客挚爱的技术成长平台
题目解析
题意很清楚,让0,1,2按照顺序排好,但是不能使用sort库函数。
将数组分为四部分,分别是:
// [0,left] 0
// [left,i] 1
// [i,right] 未排序的
// [right,n-1] 2
我们需要做的就是遍历数组,让值为0的数与数组前边的值进行交换, 值为2的数与数组后面的数进行交换,剩下的就是1的数了。
代码
class Solution
{
public:
void sortColors(vector<int>& nums)
{
// [0,left] 0
// [left,i] 1
// [i,right] 未排序的
// [right,n-1] 2
int n=nums.size();
int left=-1,right=n;
for(int i=0;i<right;)
{
if(nums[i]==0)
{
swap(nums[i++],nums[++left]);
}
// 唯独遍历到2不用对i进行++
// 因为当交换[i,right]的数据的时候这部分数是未分类的
// 因此交换过来之后还要遍历
else if(nums[i]==2)
{
swap(nums[i],nums[--right]);
}
else
i++;
}
}
};