Skip to content

75. Sort Colors

Description

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

 

Constraints:

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

 

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

 

Solutions

Solution: Two Pointers

  • Time complexity: O(n)
  • Space complexity: O(1)

 

JavaScript

js
/**
 * @param {number[]} nums
 * @return {void} Do not return anything, modify nums in-place instead.
 */
const sortColors = function (nums) {
  const n = nums.length;
  let left = 0;
  let right = n - 1;

  while (nums[left] === 0) left += 1;
  while (nums[right] === 2) right -= 1;

  if (left >= right) return;

  for (let index = left; index <= right; index++) {
    const num = nums[index];

    if (num === 0) {
      [nums[left], nums[index]] = [nums[index], nums[left]];
      left += 1;
    }
    if (num === 2) {
      [nums[index], nums[right]] = [nums[right], nums[index]];
      right -= 1;
      index -= 1;
    }
  }
};

Released under the MIT license