# leetcode – Squares of a Sorted Array

#### 问题

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

Example 1:

Input:

``` nums = [-4,-1,0,3,10]
```

Output:

``` [0,1,9,16,100]
```

Explanation:

```After squaring, the array becomes [16,1,0,9,100].
After sorting, it becomes [0,1,9,16,100].
```

Example 2:

Input:

``` nums = [-7,-3,2,3,11]
```

Output:

``` [4,9,9,49,121]
```

Constraints:

• `1 <= nums.length <= 10`4
• `-10`4` <= nums[i] <= 10`4
• `nums` is sorted in non-decreasing order.

Follow up: Squaring each element and sorting the new array is very trivial, could you find an `O(n)` solution using a different approach?

#### 解答:

##### 平方后排序

```# time complexity O(nlogn)  space complexity O(n)
def sortedSquaredArray(array):
sortedSquares = []
for value in array:
squareValue = value * value
sortedSquares.append(squareValue)
sortedSquares.sort()
return sortedSquares```
##### 双指针

```def sortedSquaredArray(array):
sortedSquares = [0  for _ in array]
smallIdx = 0
largeIdx = len(array) - 1

for idx in reversed(range(len(array))):
smallerValue = array[smallIdx]
largerValue = array[largeIdx]

if abs(largerValue) > abs(smallerValue):
sortedSquares[idx]  = largerValue * largerValue
largeIdx = largeIdx - 1
else:
sortedSquares[idx] = smallerValue * smallerValue
smallIdx = smallIdx + 1

return sortedSquares
```

#### 参考及引用

Photo by Erik Karits from Pexels