Solution

from typing import List


class Solution:
    def sortColors(self, nums: List[int]) -> None:
        """
        Do not return anything, modify nums in-place instead.
        Follow up: Could you come up with a one-pass algorithm using only constant extra space?
        """
        # Red, White, Blue μˆœμ„œ (0, 1, 2)
        # start = red, mid = white, end = blue
        start, mid, end = 0, 0, len(nums) - 1

        while mid <= end:
            # midκ°€ startμͺ½μ— μžˆμ„ λ•Œ
            if nums[mid] == 0:
                nums[start], nums[mid] = nums[mid], nums[start]
                start += 1
                mid += 1
                continue

            # midκ°€ 자기 μžμ‹ μͺ½μ— μžˆμ„ λ•Œ
            if nums[mid] == 1:
                mid += 1
                continue

            # midκ°€ endμͺ½μ— μžˆμ„ λ•Œ
            if nums[mid] == 2:
                nums[mid], nums[end] = nums[end], nums[mid]
                end -= 1


Reference

Leave a comment