题目描述
给定一个包含红色、白色和蓝色,一共 n 个元素的数组,原地对它们进行排序,使得相同颜色的元素相邻,并按照红色、白色、蓝色顺序排列。
此题中,我们使用整数 0、 1 和 2 分别表示红色、白色和蓝色。
示例 1:
输入:nums = [2,0,2,1,1,0]
输出:[0,0,1,1,2,2]
示例 2:
输入:nums = [2,0,1]
输出:[0,1,2]
来源:力扣(LeetCode)
链接:https://leetcode-cn.com/problems/sort-colors
著作权归领扣网络所有。商业转载请联系官方授权,非商业转载请注明出处。
C++
class Solution {
public:
/*
实践证明本道题不适合用快速排序
双指针,三路快排,就三个数,小于1的放左边,大于1的放右边,等于1的不动
*/
void sortColors(vector<int>& nums) {
int l=0;
int r=nums.size();
int index=-1;
while(l<r){
if(nums[l]==0){
swap(nums[++index],nums[l++]);
}else if(nums[l]==1){
l++;
}
else if(nums[l]==2){
swap(nums[--r],nums[l]);
}
}
return;
}
};
本文介绍了一种使用双指针解决LeetCode上关于颜色排序问题的C++实现方法。通过创建三个指针,分别处理小于1、等于1和大于1的元素,实现了原地排序数组,使得红色、白色和蓝色元素依次排列。这种方法避免了快速排序等复杂排序算法,简化了解决方案。
547

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



