有序数组的平方

    技术2022-07-10  129

    有序数组的平方


    题目

    有序数组的平方(力扣:977)

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

    分析

    因为是有序数组,大于0的值是向右是递增的,平方也是递增的;而小于0的值向左是递减的,平方反而是递增的,我们可以优先取平方之后的最大值,然后依次减小,最大值的结果来源,可能是最右侧(正数),也有可能是最左侧(负数)。我们使用双指针,依次对比他们的平方,移动指针即可实现。

    代码实现

    /** * 977. 有序数组的平方 * @param A * @return */ public int[] sortedSquares(int[] A) { int start = 0, end = A.length - 1, len = A.length; int[] res = new int[len]; for (int i = len - 1; i >= 0; i--) { if (A[start] * A[start] >= A[end] * A[end]) { res[i] = A[start] * A[start]; start++; } else { res[i] = A[end] * A[end]; end--; } } return res; }
    Processed: 0.016, SQL: 9