1 题目
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]
2 尝试解
class Solution {
public:
void sortColors(vector<int>& nums) {
sort(nums,0,nums.size()-1);
}
void sort(vector<int>& nums,int start, int end){
int left = start;
int right = end;
if(left >= right) return;
int pivot = nums[left];
while(left < right){
while(left<right && nums[right] >= pivot) {right--;}
if(left < right) nums[left] = nums[right];
while(left<right && nums[left] <= pivot) {left++;}
if(left < right) nums[right] = nums[left];
}
nums[left] = pivot;
sort(nums,start,left-1);
sort(nums,left+1,end);
}
};
3 最优解
class Solution {
public:
void sortColors(vector<int>& A) {
int second=A.size()-1, zero=0;
for (int i=0; i<=second; i++) {
while (A[i]==2 && i<second) swap(A[i], A[second--]);
while (A[i]==0 && i>zero) swap(A[i], A[zero++]);
}
}
};