解题思路:(双指针法)
(1)由于原数组按照递增顺序排列,所以,平方的最大值一定在数组的两端,所以首先定义一个双指针i,j使其分别指向数组第一项,和最后一项。
(2)定义一个空数组res,定义一个指针k使其指向res的最后一项(及最大值)
(3)nums[i]的平方与nums[j]的平方比较大小,同时向中间移动,大的数据存入新数组,k--
如果A[i] * A[i] < A[j] * A[j]
那么result[k--] = A[j] * A[j];
如果A[i] * A[i] >= A[j] * A[j]
那么result[k--] = A[i] * A[i]
代码如下:
/**
* @param {number[]} nums
* @return {number[]}
*/
var sortedSquares = function(nums) {
let n = nums.length;
let i=0,j=n-1,k=n-1;
//定义一个空数组用来存放数据
let res = new Array(n).fill(0);
while(i<=j){
let a = nums[i]*nums[i];
let b = nums[j]*nums[j];
if(a<=b){
res[k] = b;
j--;
k--;
}else{
res[k] = a;
i++;
k--;
}
}
return res;
};