977. Squares of a Sorted Array
双指针思路讲解,关键点
- 左右指针所指向的绝对值都是比中间值大的,所以必须是倒叙遍历,把结果数组的最大值先插入
解题思路
- 设置左右指针分别指向数组两端,
right = 0,left = nums.length - 1 - 倒叙遍历数组方便从大到小插入,如果
left指针指向的绝对值比right指针指向的绝对值大,那么移动left++,同时将较大值插入其位置result[i] = start - 剩下的情况,直接把
result[i] = square(end)插入结果数组,移动右指针right--
代码
/**
* @param {number[]} nums
* @return {number[]}
*/
var sortedSquares = function(nums) {
let square = (n) => n * n
let abs = (n) => Math.abs(n)
let result = []
let len = nums.length
let left = 0;right = len - 1
for(let i = len - 1; i >= 0; i-- ) {
let start = nums[left]
let end = nums[right]
if(abs(start) > abs(end)) {
result[i] = square(start)
left++
} else {
result[i] = square(end)
right--
}
}
return result
};