Problem Statement

My solution
class Solution:
    def pivotArray(self, nums: List[int], pivot: int) -> List[int]:
        N = len(nums)
        res = [0] * N
        idx = 0
        for num in nums:
            if num < pivot:
                res[idx] = num
                idx += 1
        for num in nums:
            if num == pivot:
                res[idx] = num
                idx += 1
        for num in nums:
            if num > pivot:
                res[idx] = num
                idx += 1
        return res
Editorial
Approach 1: Dynamic Lists
class Solution:
    def pivotArray(self, nums: List[int], pivot: int) -> List[int]:
        less = []
        equal = []
        greater = []
        for num in nums:
            if num < pivot:
                less.append(num)
            elif num > pivot:
                greater.append(num)
            else:
                equal.append(num)
        less.extend(equal)
        less.extend(greater)
        return less
Approach 2: Two Passes With Fixed Array
class Solution:
    def pivotArray(self, nums, pivot):
        less = 0
        equal = 0
        for num in nums:
            if num < pivot:
                less += 1
            elif num == pivot:
                equal += 1
        ans = [0] * len(nums)
        lessI = 0
        equalI = less
        greaterI = less + equal
        for i in range(len(nums)):
            num = nums[i]
            if num < pivot:
                ans[lessI] = num
                lessI += 1
            elif num > pivot:
                ans[greaterI] = num
                greaterI += 1
            else:
                ans[equalI] = num
                equalI += 1
        return ans
Approach 3: Two Pointer
class Solution:
    def pivotArray(self, nums, pivot):
        ans = [0] * len(nums)
        less_i = 0
        greater_i = len(nums) - 1
        for i, j in zip(range(len(nums)), range(len(nums) - 1, -1, -1)):
            if nums[i] < pivot:
                ans[less_i] = nums[i]
                less_i += 1
            if nums[j] > pivot:
                ans[greater_i] = nums[j]
                greater_i -= 1
        while less_i <= greater_i:
            ans[less_i] = pivot
            less_i += 1
        return ans