题目
Given an array with n objects colored red, white or blue, sort them in-place 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.
Note: You are not suppose to use the library's sort function for this problem.
Example:
Input: [2,0,2,1,1,0] Output: [0,0,1,1,2,2]
代码一:100.00% 77.60%
利用两个标志,分别指向1 和2,遇到0就交换两次,遇到1就交换一次。
class Solution {
public:
void sortColors(vector<int>& nums) {
int p1=0,p2=0; //p1 p1 分别指向1和2的开始
for(int i=0;i<nums.size();++i){
if(nums[i]==0){
swap(nums[p2],nums[i]);
swap(nums[p1++],nums[p2++]);
}else if(nums[i]==1){
swap(nums[i],nums[p2++]);
}
}
}
};
代码二:100.00% 75.06%
利用类似快排的思想,一个指针指向顶端0,一个指向底部2.
class Solution {
public:
void sortColors(vector<int>& nums) {
int zero=-1;
int two=nums.size();
for(int i=0;i<two;){
if(nums[i]==1) i++;
else if(nums[i]==0){
swap(nums[i++],nums[++zero]);
}else{
swap(nums[i],nums[--two]);
}
}
}
};