给定一个按非递减顺序排序的整数数组 A,返回每个数字的平方组成的新数组,要求也按非递减顺序排序。
示例 1:
输入:[-4,-1,0,3,10]
输出:[0,1,9,16,100]
示例 2:
输入:[-7,-3,2,3,11]
输出:[4,9,9,49,121]
思路:
1、暴力法:
class Solution {
public int[] sortedSquares(int[] A) {
for (int i = 0; i < A.length; i++) {
A[i] *= A[i];
}
Arrays.sort(A); !!!!!
return A;
}
}
2、双指针:
从中间的 0 开始往两边走。
class Solution {
public int[] sortedSquares(int[] A) {
int i = 0;
while (i < A.length && A[i] < 0) {
i++;
}
int j = i;
i--;
int t = 0;
int ans[] = new int[A.length];
while (i >= 0 && j < A.length) {
if (A[i] * A[i] < A[j] * A[j]) {
ans[t++] = A[i] * A[i];
i--;
}
else {
ans[t++] = A[j] * A[j];
j++;
}
}
while (i >= 0) {
ans[t++] = A[i] * A[i];
i--;
}
while (j < A.length) {
ans[t++] = A[j] * A[j];
j++;
}
return ans;
}
}