// C++
/*
给定一个按非递减顺序排序的整数数组 A,返回每个数字的平方组成的新数组,要求也按非递减顺序排序。
eg1:
输入:[-4,-1,0,3,10]
输出:[0,1,9,16,100]
eg2:
输入:[-7,-3,2,3,11]
输出:[4,9,9,49,121]
提示:
1 <= A.length <= 10000
-10000 <= A[i] <= 10000
**A 已按非递减顺序排序。**
*/
class Solution {
public:
vector<int> sortedSquares(vector<int>& A) {
int size = A.size();
vector<int> res(size);
int j = size - 1;
int i = 0;
// 要保证条件
while(i <= j)
{
// A[i]取反,和A[j]进行比较
if(-A[i] < A[j])
{
res[j-i] = A[j] * A[j];
j--;
continue;
}
else{
res[j-i] = A[i] * A[i];
i++;
}
}
return res;
}
};
题目中的原有数组已经按照非递减顺序排序,这一点非常关键。否则就只能还要按照一般排序进行了。