0
点赞
收藏
分享

微信扫一扫

75. Sort Colors**

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]);
}
}
};


举报

相关推荐

0 条评论