DEV Community

Anjana R.K.
Anjana R.K.

Posted on

Squares of a Sorted Array

Hi everyone!
Today I solved a nice problem where we need to return the squares of a sorted array in sorted order. At first it looks simple, but thereโ€™s a small twist!

Problem
Given a sorted array (can include negative numbers), return a new array of squares in sorted order.

Example:
Input: [-4, -1, 0, 3, 10]

Output: [0, 1, 9, 16, 100]

My Approach

At first, I thought:

Just square all elements and sort

But that would take O(n log n) time.

Then I noticed:

  • Negative numbers can become large after squaring
  • The largest square will be either at the start or end

So I used a two-pointer approach.

Logic

  • Use two pointers:
    • l at start
    • r at end
  • Compare squares of both ends
  • Place the larger square at the end of result array
  • Move pointers accordingly

Code (Python)
class Solution:
def sortedSquares(self, nums):
n = len(nums)
res = [0] * n
l, r = 0, n - 1

    for i in range(n - 1, -1, -1):
        if nums[l] * nums[l] > nums[r] * nums[r]:
            res[i] = nums[l] * nums[l]
            l += 1
        else:
            res[i] = nums[r] * nums[r]
            r -= 1

    return res
Enter fullscreen mode Exit fullscreen mode

Time & Space Complexity

  • Time: O(n)
  • Space: O(n)

Key Insight
Even though the array is sorted, squaring changes the order.
Using two pointers helps us avoid sorting again.

What I Learned

  • Two-pointer technique is very powerful
  • Always think about optimizing sorting problems
  • Edge values can be important in arrays

Thanks for reading!
Feel free to share your thoughts or other approaches.

Top comments (0)