Sort Colors

LeetCode 75 · View on LeetCode

Sort an array of 0s, 1s, and 2s in-place. No sort() allowed.

# Approach 1: Counting sort — O(n) time, O(1) space, two passes
def sort_colors_counting(nums: list[int]) -> None:
    counts = [0] * 3
    for n in nums:
        counts[n] += 1

    i = 0
    for val in range(3):
        for _ in range(counts[val]):
            nums[i] = val
            i += 1


# Approach 2: Dutch National Flag — O(n) time, O(1) space, ONE pass
def sort_colors(nums: list[int]) -> None:
    lo, mid, hi = 0, 0, len(nums) - 1
    while mid <= hi:
        if nums[mid] == 0:
            nums[lo], nums[mid] = nums[mid], nums[lo]
            lo += 1
            mid += 1
        elif nums[mid] == 2:
            nums[mid], nums[hi] = nums[hi], nums[mid]
            hi -= 1  # don't advance mid — swapped value needs checking
        else:
            mid += 1


if __name__ == '__main__':
    nums = [2, 0, 2, 1, 1, 0]
    sort_colors(nums)
    print(nums)  # [0, 0, 1, 1, 2, 2]
© 2026 ByteLearn.dev. Free courses for developers. · Privacy