问题描述
给定一个按非递减顺序排序的整数数组 A A A,返回每个数字的平方组成的新数组,要求也按非递减顺序排序。
解题报告
- 方法一
直接计算每个数的平方,然后排序。 - 双指针
使用两个指针分别读取数组的非负部分与负数部分【类似于归并排序的合并部分】。
时间复杂度: O ( n ) O(n) O(n)
实现代码
- 双指针
class Solution {
public:
vector<int> sortedSquares(vector<int>& A) {
vector<int>ans;
int i=0,j=0,n=A.size();
while(i<n&&A[i]<0){
i++;
}
j=i-1;
while(j>=0&&i<n){
if(A[j]*A[j]<A[i]*A[i]){
ans.push_back(A[j]*A[j]);
j--;
}
else{
ans.push_back(A[i]*A[i]);
i++;
}
}
while(j>=0){
ans.push_back(A[j]*A[j]);
j--;
}
while(i<n){
ans.push_back(A[i]*A[i]);
i++;
}
return ans;
}
};