Programming

Leetcode-977. Squares of a Sorted Array

Leetcode-977. 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]

<解題>

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)