75.Sort Colors 3色のソート
1076 ワード
0,1,2はそれぞれ3色を表す.ソートが必要です.
Example:
要件:two-passアルゴリズムではなくa passアルゴリズムを使用する.ここでいう2ステップアルゴリズムは,まず0,1,2のcountを統計し,それぞれの数で配列に入れる.
思考:要求を見ていない時、思いついた方法も要求の中で言及したtwo-passアルゴリズムで、更に1歩の策略を考えるのは少し難しくて、solutionの解法を見ました
Example:
Input: [2,0,2,1,1,0]
Output: [0,0,1,1,2,2]
要件:two-passアルゴリズムではなくa passアルゴリズムを使用する.ここでいう2ステップアルゴリズムは,まず0,1,2のcountを統計し,それぞれの数で配列に入れる.
思考:要求を見ていない時、思いついた方法も要求の中で言及したtwo-passアルゴリズムで、更に1歩の策略を考えるのは少し難しくて、solutionの解法を見ました
void sortColors(vector& nums) {
int high = nums.size() -1;
int low = 0;
// i mid
// low , 0
// high , 2
// case: [2, 0, 1],
int i = 0;
// , i 0, j ,i , j 2,j <=i , j i , 1。
// i 2 ,i , k 0, j
while(i <= high) {
if (nums[i] == 2) {
swap(nums[i], nums[high]);
--high;
} else if (nums[i] == 0) {
swap(nums[i], nums[low]);
++low;
++i;
} else {
++i;
}
}
}