Squares of a Sorted Array

easy two pointers array sorting

Problem

Given an integer array nums sorted in non-decreasing order, return an array of the squares of each number sorted in non-decreasing order.

Inputnums = [-4, -1, 0, 3, 10]
Output[0, 1, 9, 16, 100]
Squaring gives [16, 1, 0, 9, 100]; sorting yields [0, 1, 9, 16, 100].

def sorted_squares(nums):
    n = len(nums)
    result = [0] * n
    left, right = 0, n - 1
    for pos in range(n - 1, -1, -1):
        if abs(nums[left]) > abs(nums[right]):
            result[pos] = nums[left] * nums[left]
            left += 1
        else:
            result[pos] = nums[right] * nums[right]
            right -= 1
    return result
function sortedSquares(nums) {
  const n = nums.length;
  const result = new Array(n).fill(0);
  let left = 0, right = n - 1;
  for (let pos = n - 1; pos >= 0; pos--) {
    if (Math.abs(nums[left]) > Math.abs(nums[right])) {
      result[pos] = nums[left] * nums[left];
      left++;
    } else {
      result[pos] = nums[right] * nums[right];
      right--;
    }
  }
  return result;
}
class Solution {
    public int[] sortedSquares(int[] nums) {
        int n = nums.length;
        int[] result = new int[n];
        int left = 0, right = n - 1;
        for (int pos = n - 1; pos >= 0; pos--) {
            if (Math.abs(nums[left]) > Math.abs(nums[right])) {
                result[pos] = nums[left] * nums[left];
                left++;
            } else {
                result[pos] = nums[right] * nums[right];
                right--;
            }
        }
        return result;
    }
}
vector<int> sortedSquares(vector<int>& nums) {
    int n = (int)nums.size();
    vector<int> result(n);
    int left = 0, right = n - 1;
    for (int pos = n - 1; pos >= 0; pos--) {
        if (abs(nums[left]) > abs(nums[right])) {
            result[pos] = nums[left] * nums[left];
            left++;
        } else {
            result[pos] = nums[right] * nums[right];
            right--;
        }
    }
    return result;
}
Time: O(n) Space: O(n)