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]
class Solution {
public int[] sortedSquares(int[] nums) {
int n = nums.length;
int positivePointer = 0;
while (positivePointer < n && nums[positivePointer] < 0){
positivePointer++;
}
int negativePointer = positivePointer - 1;
int[] outputArray = new int[n];
int count = 0;
while (negativePointer >= 0 && positivePointer < n){
if (nums[negativePointer] * nums[negativePointer] < nums[positivePointer] * nums[positivePointer]){
outputArray[count++] = nums[negativePointer] * nums[negativePointer];
negativePointer--;
} else {
outputArray[count++] = nums[positivePointer] * nums[positivePointer];
positivePointer++;
}
}
while (negativePointer >= 0){
outputArray[count++] = nums[negativePointer] * nums[negativePointer];
negativePointer--;
}
while (positivePointer < n){
outputArray[count++] = nums[positivePointer] * nums[positivePointer];
positivePointer++;
}
return outputArray;
}
}
Time: O(N) Space: O(N)