Sort Colors -- leetcode

Given an array with n objects colored red, white or blue, sort them 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.

click to show follow up.

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 an one-pass algorithm using only constant space?

算法一:红白蓝三指针从前向后移动

这个算法理解可以借用刷墙。

假设有x个红,y个白,z个蓝

先全部刷成蓝(x+y+z)。

再从头刷(x+y)个成白。

再从头刷x个成红。

class Solution {
public:
    void sortColors(int A[], int n) {
        int red = -1, white = -1, blue = -1;
        for (int i=0; i<n; i++) {
            if (A[i] == 2) {
                ++blue;
            }
            else if (A[i] == 1) {
                A[++blue] = 2;
                A[++white] = 1;
            }
            else {
                A[++blue] = 2;
                A[++white] = 1;
                A[++red] = 0;
            }
        }
    }
};

算法参考自:

https://leetcode.com/discuss/1827/anyone-with-one-pass-and-constant-space-solution

算法二:红白二指针从前向后, 蓝指针从后往前移动

class Solution {
public:
    void sortColors(int A[], int n) {
        int red = -1, white = 0, blue = n;
        while (white < blue) {
            if (A[white] == 1) {
                ++white;
            }
            else if (A[white] == 0) {
                A[white++] = 1;
                A[++red] = 0;
            }
            else {
                A[white] = A[--blue];
                A[blue] = 2;
            }
        }
    }
};
时间: 2024-08-03 04:17:38

Sort Colors -- leetcode的相关文章

Sort Colors leetcode java

题目: Given an array with n objects colored red, white or blue, sort them 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, an

Sort Colors —— LeetCode

Given an array with n objects colored red, white or blue, sort them 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 bl

Sort Colors [leetcode] 扫描数组一遍,O(1)空间复杂度的解法

扫描数组两遍的方法是:第一遍计算有每个颜色有多少个,第二遍再将所有颜色赋回数组 扫描数组一遍的方法: nextPos数组中记录三种颜色的下一个位置 考虑A={0,2,1,1,0}时我们应该如何更新nextPos 初始:nextPos = {0,0,0} 第一个颜色是0,所以nextPos[0] = 1.A={0...} 但是由于1和2必须在0的后面,所以nextPos[1], nextPos[2]均为1 第二个颜色是2,所以nextPos[2] = 2.A={0, 2...} 1和0均在2的前面

leetcode Sort Colors

*/--> pre.src {background-color: Black; color: White;} pre.src {background-color: Black; color: White;} pre.src {background-color: Black; color: White;} leetcode Sort Colors 计数排序 注: 题目的要求是将 A 数组重新排列成有序, 而不是将排序的序列输出 Sort Colors Given an array with n o

【LeetCode】Sort Colors

LeetCode OJ Given an array with n objects colored red, white or blue, sort them 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, w

LeetCode OJ平台上Sort Colors题目算法探讨

原题如下,意思就是说无序数组(由0,1,2组成),一遍扫描,把数组整理成若干个0-若干个1-若干个2这样的序列. Given an array with n objects colored red, white or blue, sort them so that objects of the same color are adjacent, with the colors in the order red, white and blue. Here, we will use the integ

[leetcode]Sort Colors @ Python

原题地址:https://oj.leetcode.com/problems/sort-colors/ 题意: Given an array with n objects colored red, white or blue, sort them so that objects of the same color are adjacent, with the colors in the order red, white and blue. Here, we will use the integer

LeetCode: Sort Colors 题解

Given an array with n objects colored red, white or blue, sort them 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 bl

[LeetCode OJ] Sort Colors

Given an array with n objects colored red, white or blue, sort them 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 bl