class Solution:
    def sortColors(self, nums: List[int]) -> None:
        """
        Do not return anything, modify nums in-place instead.
        time O(N) space O(1)
        [0,zero)  = 0 
        [zero,i) = 1
        [two,len-1] = 2,  two = len-1
    
        """
        # step1: edge case 
        size = len(nums)
        if size < 2 :
            return

        # step2 initialize 
        zero = 0
        two = size
        # step3 define swap function
        def swap(nums,i1,i2):
            nums[i1],nums[i2] = nums[i2],nums[i1]
        
        # step4: loop arr, 3 cases, nums[i] in [0,1,2]
        i = 0
        while i < two:
            if nums[i] == 0:
                swap(nums,i,zero)
                i += 1
                zero += 1 
            elif nums[i]==1:
                i += 1 
            else:  # nums[i] == 2 
                two -= 1 
                swap(nums,i,two)