/*此算法思想就是先过滤掉有可能已经排好的某些颜色,其次前后两侧一起向中间相向检测,
遇到非红色记录此位置,白色继续循环,蓝色就和后面的交换,知道前后两个标记相遇*/
class Solution {
public:
void sortColors(vector<int>& nums) {
int left = 0,right=nums.size()-1;
int flag; //flag记录下次与红色交换的位置;
while (nums[left] == 0)//过滤前面的红色
left++;
while (nums[right] == 2)//过滤后面的蓝色色
right--;
flag = left;
while (left <= right)
{
if (nums[left] == 0)
{
swap(nums[left], nums[flag]);//所搜到红色就和flag位置交换,然后均向前移动
left++;
flag++;
}
else if (nums[left] == 1) //如果是白色,则不做交换
left++;
else //搜索到蓝色的就将蓝色置换到后面
{
swap(nums[left],nums[right]);
right--;
}
}
}
};
75. Sort Colors
最新推荐文章于 2025-09-11 22:31:07 发布
