一.相关链接
题目链接:977.有序数组的平方
二.心得体会
本题的关键在于比较正数负数对应平方值的大小,因此完全可以从头尾两端同时往中间遍历,类似归并排序。也可以找到正数和负数的分界再归并排序,效果一样。
三.代码
class Solution {
public:
vector<int> sortedSquares(vector<int>& nums) {
const int len = nums.size();
if(len == 1){
nums[0] = nums[0] * nums[0];
return nums;
}
vector<int> ans(len);
int head = 0;
int tail = len - 1;
int head2 = nums[head] * nums[head];
int tail2 = nums[tail] * nums[tail];
for(int i=len-1;i>=0;i--){
if(head2 > tail2){
ans[i] = head2;
head += 1;
if(head < len) //小心超出数组边界
head2 = nums[head] * nums[head];
}
else {
ans[i] = tail2;
tail -= 1;
if(tail >= 0) //小心超出数组边界
tail2 = nums[tail] * nums[tail];
}
}
return ans;
}
};