75. Sort Colors**
https://leetcode.com/problems/sort-colors/
题目描述
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]
Follow up:
A rather straight forward solution is a two-pass algorithm using counting sort.
First, iterate the array counting number of 0
's, 1
's, and 2
's, then overwrite array with total number of 0
's, then 1
's and followed by 2
's.
Could you come up with a one-pass algorithm using only constant space?
解题思路
采用 3 路快排的思路.
C++ 实现 1
lass Solution {
public:
void sortColors(vector<int>& nums) {
int lt = -1, gt = nums.size(), i = 0;
// nums[0...lt] 保存 0
// nums[lt+1...gt) 保存 1
// nums[gt...end] 保存 2
while (i < gt) {
if (nums[i] == 1)
i ++;
else if (nums[i] == 0)
std::swap(nums[++lt], nums[i++]);
else
std::swap(nums[--gt], nums[i]);
}
}
};