题目描述
给定一个按非递减顺序排序的整数数组A,返回每个数字的平方组成的新数组,要求也按非递减顺序排序。
思路
创建一个数组,然后从A左右两端开始,比较左边和右边的谁的平方更大,将其插入到创建的数组的最后即可。
C++代码
class Solution {
public:
/**
* @param a: The array A.
* @return: The array of the squares.
*/
vector<int> squareArray(vector<int> &a) {
// write your code here
int len = a.size();
std::vector<int> result(len, 0);
int begin = 0;
int end = len - 1;
int index = len - 1;
while(begin <= end) {
int left = a[begin] * a[begin];
int right = a[end] * a[end];
if (left > right) {
result[index] = left;
begin++;
} else {
result[index] = right;
end--;
}
index--;
}
return result;
}
};