LeetCode75. Sort Colors
程序员文章站
2022-03-11 11:51:58
...
75. 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?
The idea is to sweep all 0s to the left and all 2s to the right, then all 1s are left in the middle.
原始方法是用简单的冒泡法排序做的。
https://github.com/abesft/leetcode/blob/master/75SortColors/75SortColors.cpp
#include <iostream>
#include<vector>
#include<algorithm>
using namespace std;
/*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]*/
class Solution {
public:
#if 0
void sortColors(vector<int>& nums) {
//bubble sort
int length = nums.size();
for (size_t i = 0; i < length; i++)
{
for (size_t j = length - 1; j > i; j--)
{
if (nums[i] > nums[j])
swap(nums[i], nums[j]);
}
}
}
#else
void sortColors(vector<int>& nums) {
//The idea is to sweep all 0s to the left and all 2s to the right, then all 1s are left in the middle.
//https://leetcode.com/problems/sort-colors/discuss/26472/Share-my-at-most-two-pass-constant-space-10-line-solution
int zero = 0, second = nums.size() - 1;
for (int i =0; i <= second; i++)
{
while (nums[i] == 2 && i < second) swap(nums[i], nums[second--]);
while (nums[i] == 0 && i > zero) swap(nums[i], nums[zero++]);
}
}
#endif // 0
};
int main()
{
Solution sln;
vector<int> nums{ 2,0,2,1,1,0 };
sln.sortColors(nums);
for (auto & i : nums)
cout << i << " ";
std::cout << "Hello World!\n";
}
推荐阅读
-
python中List的sort方法指南
-
经典排序算法之冒泡排序(Bubble sort)代码
-
JS排序方法(sort,bubble,select,insert)代码汇总
-
Python中的sort怎么使用
-
python sort、sort_index方法代码实例
-
Javascript数组系列四之数组的转换与排序Sort方法
-
java插入排序 Insert sort实例
-
mysql Sort aborted: Out of sort memory, consider increasing server sort buffer s
-
Shell 编程 排序工具 sort 和 uniq
-
PHP排序算法之堆排序(Heap Sort)实例详解