LeetCode-Java题解 977. Squares of a Sorted Array

发布时间 2023-05-28 12:28:44作者: 古宇

题目地址:977. Squares of a Sorted Array
解题思路:
    又是一道双指针的题目,看见秒想到双指针(平方直接调用sort方法也行,但是这么写这题就没意思了)。但是,我一直在想,不增加空间消耗的情况下,如何进行排列,想了半天把自己绕进去了。开辟一个新数组,倒序放置就非常简单了。一定要利用原来数组是递增的这个有利条件,因为进行平方后原数组是“三角式”结构,即两边大,中间小,所以一边放置一个指针进行比较就可以了,数组两端要么左边最大,要么右边最大。两数打擂,大的插入新数组,并更换下一个数。需要注意的是边界条件,一定是j>=i,否则如果一起指到同一个数会丢失一个结果。

class Solution {
    public int[] sortedSquares(int[] nums) {
        int pos=nums.length-1;
        int[] newArray = new int[nums.length];
        for (int i=0,j=nums.length-1;j>=i;){
            if (nums[i]*nums[i]>nums[j]*nums[j]){
                newArray[pos]=nums[i]*nums[i];
                i++;
            }else {
                newArray[pos]=nums[j]*nums[j];
                j--;
            }
            pos--;
        }
        return newArray;
    }
}