题目:
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;
}
}
}
};
本文介绍了一种高效的三色排序算法,该算法可以将数组中红色(0)、白色(1)、蓝色(2)三种颜色的对象按顺序排列。通过维护三个指针i、j和count,仅需遍历一次数组即可完成排序。
3117

被折叠的 条评论
为什么被折叠?



