Given an array with n objects colored red, white or blue, sort them 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.
思路:类似于快排的思想,开辟存放0的空间,不断增加。也开辟存放2的空间,不断移动指针。中间放1.
class Solution {
public:
void sortColors(vector<int>& nums) {
int i = -1;
int j = nums.size();
for (int k = 0; k < j; k++){
if (nums[k] == 0){
i++;
swap(nums[i], nums[k]);
}
else if (nums[k] == 2){
j--;
swap(nums[j], nums[k]);
k--;
}
else{
//do nothing
}
}
}
};
二刷:
思路同上
class Solution {
public:
void sortColors(vector<int>& nums) {
int i = -1, j = nums.size();
int k = 0;
while (k < j){
switch (nums[k]){
case 0:
i++;
swap(nums[i], nums[k]);
break;
case 1:
break;
case 2:
j--;
swap(nums[k], nums[j]);
break;
}
k++;
}
return;
}
};