75. Sort Colors
problem description
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:
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?
algorithm thought
典型的计数排序,计数排序时间复杂度是 O(n),但是适用于数字比较少的情况。这里一共就3个数字,是比较适合的。
最简单的一种方法是,两次遍历出结果,第一次遍历得到所有数的count,第二次遍历对数组赋值。
能否一次遍历出结果呢?是可以的,使用两个标志位标志0,1的结尾。遍历数组,如果为0,swap交换到0的末尾,如果为1,swap交换到1的末尾
code
algorithm analysis
一次遍历数组,时间复杂度O(n)
Last updated