09 Sept 2026Go / Python / TypeScriptEasy

Squares of a Sorted Array

Square a sorted integer array and return the squared values in sorted order.

The largest square is at one of the two ends. Fill the result backward while moving the pointer with the larger absolute value.

complexity

O(n) time and O(n) output space.

solution files

  • Go squares-of-a-sorted-array/solution.go
  • Python squares-of-a-sorted-array/solution.py
  • TypeScript squares-of-a-sorted-array/solution.ts

Solution files

Gosquares-of-a-sorted-array/solution.go
package main

func sortedSquares(nums []int) []int {
	result := make([]int, len(nums))
	left, right := 0, len(nums)-1
	for write := len(nums) - 1; write >= 0; write-- {
		if absSquare(nums[left]) > absSquare(nums[right]) {
			result[write] = nums[left] * nums[left]
			left++
		} else {
			result[write] = nums[right] * nums[right]
			right--
		}
	}
	return result
}
func absSquare(value int) int {
	if value < 0 {
		return -value
	}
	return value
}
Pythonsquares-of-a-sorted-array/solution.py
class Solution:
    def sortedSquares(self, nums: list[int]) -> list[int]:
        result = [class="syntax-number">0] * len(nums); left, right = class="syntax-number">0, len(nums) - class="syntax-number">1
        for write in range(len(nums) - class="syntax-number">1, -class="syntax-number">1, -class="syntax-number">1):
            if abs(nums[left]) > abs(nums[right]): result[write], left = nums[left] ** class="syntax-number">2, left + class="syntax-number">1
            else: result[write], right = nums[right] ** class="syntax-number">2, right - class="syntax-number">1
        return result
TypeScriptsquares-of-a-sorted-array/solution.ts
function sortedSquares(nums: number[]): number[] {
  const result = new Array<number>(nums.length);
  let left = class="syntax-number">0; let right = nums.length - class="syntax-number">1;
  for (let write = nums.length - class="syntax-number">1; write >= class="syntax-number">0; write -= class="syntax-number">1) { if (Math.abs(nums[left]) > Math.abs(nums[right])) { result[write] = nums[left] ** class="syntax-number">2; left += class="syntax-number">1; } else { result[write] = nums[right] ** class="syntax-number">2; right -= class="syntax-number">1; } }
  return result;
}