leetcode之有序数组的平方

Posted 亦小海

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了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;
    }
}

 

以上是关于leetcode之有序数组的平方的主要内容,如果未能解决你的问题,请参考以下文章

LeetCode977. 有序数组的平方

LeetCode刷题977-简单-有序数组的平方

LeetCode刷题977-简单-有序数组的平方

LeetCode 977. 有序数组的平方

977数组-有序数组的平方

Leetcode刷题100天—977. 有序数组的平方(双指针)—day20