- 颜色分类
难度:中等
给定一个包含红色、白色和蓝色,一共 n 个元素的数组,原地对它们进行排序,使得相同颜色的元素相邻,并按照红色、白色、蓝色顺序排列。
此题中,我们使用整数 0、 1 和 2 分别表示红色、白色和蓝色。
class Solution {
public:
void sortColors(vector<int>& nums) {
int begin=0,end=nums.size()-1; //双指针,一个指向0,一个指向2
for(int i=0;i < nums.size() ;i++)//遍历一遍数组
{
if(nums[i] == 0 && i >= begin)
{
swap(nums[i],nums[begin]);
begin++;
}
else if(nums[i] == 2 && i <end)
{
swap(nums[i],nums[end]);
end--;
i--; //不能确定交换后的nums[i]值是否是正确位置,所以下次要从这个位置再次判断
}
}
}
};
执行结果:
通过
执行用时:
0 ms
, 在所有 C++ 提交中击败了
100.00%
的用户
内存消耗:
8 MB
, 在所有 C++ 提交中击败了
78.52%
的用户
通过测试用例:
87 / 87
双指针排序算法实现
这篇博客介绍了如何使用双指针方法对包含红、白、蓝三种颜色的数组进行排序,使得相同颜色的元素相邻并按红色、白色、蓝色的顺序排列。该算法在C++中实现了0ms的执行时间和8MB的内存消耗,且在所有提交中表现优秀。
238

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



