标题
思路
类似于归并排序的“并”的步骤,注意最后一个left的值要单独拿出来填充(因为left = right就停止了,此时对应的值还没有进入ans)
代码
/**
* @param {number[]} nums
* @return {number[]}
*/
var sortedSquares = function(nums) {
let ans = new Array(nums.length);
//大数在两边
let left =0 , right = nums.length - 1, pointer = ans.length - 1;
while(left < right){
if(nums[left]**2 >= nums[right]**2){
ans[pointer--] = nums[left++]**2;
}else{
ans[pointer--] = nums[right--]**2;
}
}
//因为left < right,所以最后一个数实际上没有被复制
ans[pointer] = nums[left]**2;
return ans;
};