75. Sort Colors

Problem


Tags: Array, Two Pointers, Sorting

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

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?

Code

JS

// 75. Sort Colors (1/11/53841)
// Runtime: 72 ms (61.00%) Memory: 39.01 MB (94.75%) 

/**
 * @param {number[]} nums
 * @return {void} Do not return anything, modify nums in-place instead.
 */
function sortColors(nums) {
    const length = nums.length;
    let count = [0, 0, 0];
    for(let i = 0; i < length; i++) count[nums[i]]++;
    let idx = 0;
    for(let i = 0; i < 3; i++) 
        for(let j = 0; j < count[i]; j++) 
            nums[idx++] = i;
};