32 977. Squares of a Sorted Array 有序数组的平方

87 阅读1分钟

977. Squares of a Sorted Array

双指针思路讲解,关键点

  • 左右指针所指向的绝对值都是比中间值大的,所以必须是倒叙遍历,把结果数组的最大值先插入

解题思路

  1. 设置左右指针分别指向数组两端,right = 0,left = nums.length - 1
  2. 倒叙遍历数组方便从大到小插入,如果 left 指针指向的绝对值比 right 指针指向的绝对值大,那么移动 left++,同时将较大值插入其位置 result[i] = start
  3. 剩下的情况,直接把 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
};