0977. Squares of a Sorted Array

0977. Squares of A Sorted Array #

题目 #

给定按 非递减顺序 排序的整型数组 nums,返回 每个数字的平方 组成的新数组,要求新数组也按 非递减顺序 排序。

思路 #

双指针 #

代码 #

双指针 #

class Solution {
    public int[] sortedSquares(int[] nums) {
        int[] ans = new int[nums.length];
        int i = 0, j = nums.length - 1, ptr = nums.length - 1;
        while (i <= j) {
            int num = Math.abs(nums[i]) > Math.abs(nums[j]) ? nums[i++] : nums[j--];
            ans[ptr--] = num * num;
        }
        return ans;
    }
}
class Solution {
    public int[] sortedSquares(int[] nums) {
        if (nums == null) return null;
        int sz = nums.length;
        int[] result = new int[sz];
        if (nums[0] >= 0) for (int i=0; i<sz; i++) result[i] = nums[i] * nums[i];
        else if (nums[sz-1] <= 0) for (int i=sz-1; i>=0; i--) result[sz-1] = nums[i] * nums[i];
        else {
            int left=-1, right=nums.length; index=0;
            while (nums[left+1] < 0) left+=1;
            right = left + 1;
            while (left >= 0 && right < sz) {
                if (-nums[left] < nums[right]) {
                    result[index] = nums[left] * nums[left];
                    left -= 1;
                }
                else {
                    result[index] = nums[right] * nums[right];
                    right += 1;
                }
                index += 1;
            }
            while (index < sz) {
                if (left >= 0) {
                    result[index] = nums[left] * nums[left];
                    left -= 1;
                }
                else {
                    result[index] = nums[right] * nums[right];
                    right += 1;
                }
            }
        }
        return result;
    }
}