给定一个包含红色、白色和蓝色,一共 n 个元素的数组,原地对它们进行排序,使得相同颜色的元素相邻,并按照红色、白色、蓝色顺序排列。
此题中,我们使用整数 0、 1 和 2 分别表示红色、白色和蓝色。
注意: 不能使用代码库中的排序函数来解决这道题。
方法一:排序 方法二:三指针,时间复杂度O(N),左指针指向0,右指针指向2,p指针从最左边向右边移动,p指针指向的数为0,与左指针交换,并同时向右移动一位,指向2,与右指针交换,右指针向左移一位,p指针不动,指向为1,p右移一位。
class Solution { public: void sortColors(vector<int>& nums) { int pl,pr,p; pl=p=0; pr=nums.size()-1; while(p<=pr) { if(nums[p]==0) swap(nums[p++],nums[pl++]); else if(nums[p]==2) swap(nums[p],nums[pr--]); else p++; } } };