有序数组的平方

69 阅读1分钟

题目描述

给你一个按 非递减顺序 排序的整数数组 nums,返回 每个数字的平方 组成的新数组,要求也按 非递减顺序 排序。

image.png

难点

  1. 最大值一定是从数组两端产生的
  2. 双指针的移动是有条件的。

思路

双指针法:

image.png

代码

/**
 * @param {number[]} nums
 * @return {number[]}
 */
var sortedSquares = function(nums) {
    let result=[]; //结果数组
    let k=nums.length-1;//结果数组的下标
    //i指针:从数组头开始移动
    // j指针: 从数组尾开始移动
    for(let i=0,j=nums.length-1;i<=j;){
        let r=nums[i]*nums[i],m=nums[j]*nums[j]; //得到元素值得平方
        //对比大小
        if(r>=m){
            result[k]=r;
            i++;
            k--;
        }else{
            result[k]=m;
            j--;
            k--;
        }
    }
    return result;
};

结果

image.png

总结

  1. 要明白i, j, k代表的意思。
  2. 有条件的控制指针的移动。