有序数组的平方
题目
有序数组的平方(力扣: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;
}