75. Sort Colors

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:

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

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?
Language: java
class Solution {
    public void sortColors(int[] nums) {
        int left = 0, mid = 0, right = nums.length - 1;
        while(mid <= right){
            if(nums[mid] == 2){
                swap(nums, mid, right);
                right--;
            }else if(nums[mid] == 1){
                mid++;
            }else{
                swap(nums, left, mid);
                left++;
                mid++;
            }
        }
    }
    public void swap(int[] nums, int i, int j){
        if(i != j){
            int temp = nums[i];
            nums[i] = nums[j];
            nums[j] = temp;
        }
    }
}
Analysis:
  1. Two Pointers;
  2. Dutch flag question;
Submission Detail
Accepted Solutions Runtime Distribution
Accepted Solutions Memory Distribution
Language: Python
class Solution:
    def sortColors(self, nums: List[int]) -> None:
        """
        Do not return anything, modify nums in-place instead.
        """
        i = current = 0
        j = len(nums) - 1
        while current <= j:
            if nums[current] == 0:
                nums[i], nums[current] = nums[current], nums[i]
                i += 1
                current += 1
            elif nums[current] == 1:
                current += 1
            else:
                nums[current], nums[j] = nums[j], nums[current]
                j -= 1

Submission Detail

Accepted Solutions Runtime Distribution

Accepted Solutions Memory Distribution

Summary:

  1. Java runtime is shorter than Python;
  2. Java uses more memory than Python;
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容