leetcode之有序数组的平方

题目描述:

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

示例 1:

输入:[-4,-1,0,3,10]
输出:[0,1,9,16,100]

示例 2:

输入:[-7,-3,2,3,11]
输出:[4,9,9,49,121]


解题:
非递减顺序排序的整数数组,如果存在负数,即是说元素平方后,原序列的整体大小情况是:大--小--大,这时候我们采用头尾指针的方式:
头部第一个元素与尾部最后一个元素相互比较,即可得出最大的元素,将这个元素存进辅助数组最大的位置;
头尾相互逼近式比较,直至头尾指针相遇,结束,这时辅助数组里的序列就是我们想要的结果。
class Solution {
    public int[] sortedSquares(int[] A) {
        int len = A.length;
        if (len == 0) return new int[] {0};
        int[] res = new int[len];
        // 利用头尾双指针
        int i = 0;
        int j = len - 1;
        int cur = len-1;
        
        while(j>=i){
            if(A[i]*A[i] > A[j]*A[j]){
                res[cur--] = A[i]*A[i];  //j--
                i++;
            }
            else{
                res[cur--] = A[j]*A[j];
                j--;
            }
        }
        return res;
    }
}
原文地址:https://www.cnblogs.com/lisen10/p/leetcode.html