Skip to content

Latest commit

 

History

History

75

Folders and files

NameName
Last commit message
Last commit date

parent directory

..
 
 

Given an array nums 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.

We will use the integers 0, 1, and 2 to represent the color red, white, and blue, respectively.

You must solve this problem without using the library's sort function.

 

Example 1:

Input: nums = [2,0,2,1,1,0]
Output: [0,0,1,1,2,2]

Example 2:

Input: nums = [2,0,1]
Output: [0,1,2]

Example 3:

Input: nums = [0]
Output: [0]

Example 4:

Input: nums = [1]
Output: [1]

 

Constraints:

  • n == nums.length
  • 1 <= n <= 300
  • nums[i] is 0, 1, or 2.

 

Follow up: Could you come up with a one-pass algorithm using only constant extra space?

Companies:
Microsoft, Amazon, Adobe, Apple, Facebook, Bloomberg, Nvidia, Swiggy

Related Topics:
Array, Two Pointers, Sorting

Similar Questions:

Solution 1. Count Sort

// OJ: https://leetcode.com/problems/sort-colors/
// Author: github.com/lzl124631x
// Time: O(N)
// Space: O(1)
class Solution {
public:
    void sortColors(vector<int>& nums) {
        vector<int> cnt(3, 0);
        for (int n : nums) cnt[n]++;
        int i = 0;
        for (int j = 0; j < 3; ++j) {
            while (cnt[j]--) nums[i++] = j;
        }
    }
};

Solution 2.

// OJ: https://leetcode.com/problems/sort-colors/
// Author: github.com/lzl124631x
// Time: O(N)
// Space: O(1)
class Solution {
public:
    void sortColors(vector<int>& nums) {
        int r = 0, g = 0, b = 0;
        for (int n : nums) {
            if (n == 0) {
                nums[b++] = 2;
                nums[g++] = 1;
                nums[r++] = 0;
            } else if (n == 1) {
                nums[b++] = 2;
                nums[g++] = 1;
            } else nums[b++] = 2;
        }
    }
};

Solution 3.

Dutch national flag problem

// OJ: https://leetcode.com/problems/sort-colors/
// Author: github.com/lzl124631x
// Time: O(N)
// Space: O(1)
// Ref: https://leetcode.com/problems/sort-colors/solution/
class Solution {
public:
    void sortColors(vector<int>& A) {
        int zero = 0, two = A.size() - 1;
        for (int i = 0; i <= two; ) {
            if (A[i] == 0) {
                swap(A[i++], A[zero++]);
            } else if (A[i] == 2) {
                swap(A[i], A[two--]);
            } else ++i;
        }
    }
};