Partition Array According to Given Pivot

medium array two pointers simulation

Problem

Given an integer array nums and an integer pivot, rearrange nums so that every element less than pivot comes before every element equal to pivot, which comes before every element greater than pivot. The relative order of equal elements must be preserved.

Inputnums = [9, 12, 5, 10, 14, 3, 10], pivot = 10
Output[9, 5, 3, 10, 10, 12, 14]
Lefts in order: 9, 5, 3. Equals in order: 10, 10. Rights in order: 12, 14.

def pivot_array(nums, pivot):
    less, equal, greater = [], [], []
    for x in nums:
        if x < pivot:
            less.append(x)
        elif x == pivot:
            equal.append(x)
        else:
            greater.append(x)
    return less + equal + greater
function pivotArray(nums, pivot) {
  const less = [], equal = [], greater = [];
  for (const x of nums) {
    if (x < pivot) less.push(x);
    else if (x === pivot) equal.push(x);
    else greater.push(x);
  }
  return [...less, ...equal, ...greater];
}
class Solution {
    public int[] pivotArray(int[] nums, int pivot) {
        List<Integer> less = new ArrayList<>();
        List<Integer> equal = new ArrayList<>();
        List<Integer> greater = new ArrayList<>();
        for (int x : nums) {
            if (x < pivot) less.add(x);
            else if (x == pivot) equal.add(x);
            else greater.add(x);
        }
        int[] out = new int[nums.length];
        int i = 0;
        for (int x : less) out[i++] = x;
        for (int x : equal) out[i++] = x;
        for (int x : greater) out[i++] = x;
        return out;
    }
}
vector<int> pivotArray(vector<int>& nums, int pivot) {
    vector<int> less, equal, greater;
    for (int x : nums) {
        if (x < pivot) less.push_back(x);
        else if (x == pivot) equal.push_back(x);
        else greater.push_back(x);
    }
    vector<int> out;
    out.reserve(nums.size());
    for (int x : less) out.push_back(x);
    for (int x : equal) out.push_back(x);
    for (int x : greater) out.push_back(x);
    return out;
}
Time: O(n) Space: O(n)