题目:
Given an array with n objects colored red, white or blue, sort them so that objects of the same color are adjacent, with the colors in the order red, white and blue.
Here, we will use the integers 0, 1, and 2 to represent the color red, white, and blue respectively.
思路:类似剑指offer里的数组奇偶排序,变量i,j 分别记录最近更新red和blue走到的下标(初始化:i=-1,j=数组大小),count为遍历数组的下标(初始化为0)。当nums[count]为0,交换nums[count]和nums[i+1];;为1时跳过;为2时和nums[j-1]交换。遍历一遍数组就行。
class Solution {
public:
void sortColors(vector<int>& nums)
{
int len=nums.size();
int i=-1,j=len;
int count=0;
while(count<j)
{
if(nums[count]==1)
{
count++;
continue;
}
if(nums[count]==0)
{
swap(nums[i+1],nums[count]);
i++;
count++;
continue;
}
if(nums[count]==2)
{
swap(nums[j-1],nums[count]);
j--;
continue;
}
}
}
};