题目描述
给定一个按非递减顺序排序的整数数组 A,返回每个数字的平方组成的新数组,要求也按非递减顺序排序。
示例 1:
输入:[-4,-1,0,3,10]
输出:[0,1,9,16,100]
示例 2:
输入:[-7,-3,2,3,11]
输出:[4,9,9,49,121]
提示:
- 1 <= A.length <= 10000
- -10000 <= A[i] <= 10000
- A 已按非递减顺序排序。
解答 By 海轰
提交代码
vector<int> sortedSquares(vector<int>& A) {
for(int i=0;i<A.size();++i)
{
A[i]*=A[i];
}
sort(A.begin(),A.end());
return A;
}
运行结果
提交代码(双指针)
vector<int> sortedSquares(vector<int>& A) {
int n=A.size();
vector<int> ans(n);
int i=0;// 非负数的第一个数字
while(i<n&&A[i]<0)
++i;
int j=i-1;// 最大的负数
int t=0;
while(i<n&&j>=0)
{
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<n)
{
ans[t++]=A[i]*A[i];
++i;
}
while(j>=0)
{
ans[t++]=A[j]*A[j];
--j;
}
return ans;
}
运行结果
题目来源
来源:力扣(LeetCode)
链接:https://leetcode-cn.com/problems/squares-of-a-sorted-array