给定一个按非递减顺序排序的整数数组 A,返回每个数字的平方组成的新数组,要求也按非递减顺序排序。
方法一: 先求平方,再快排
时间复杂度:O(nlogn)
空间复杂度:O(1)
class Solution {
public int[] sortedSquares(int[] A) {
for(int i = 0; i < A.length; i++){
A[i] = (int)Math.pow(A[i], 2);
}
Arrays.sort(A);
return A;
}
}
方法二:使用双指针
时间复杂度:O(n)
空间复杂度:O(n)
class Solution {
public int[] sortedSquares(int[] A) {
int i = 0;
int j = A.length - 1;
int k = A.length - 1;
int[] ans = new int[A.length];
while(i <= j){
if(A[i] + A[j] < 0){
ans[k--] = A[i] * A[i];
i++;
}
else{
ans[k--] = A[j] * A[j];
j--;
}
}
return ans;
}
}