力扣题目链接(opens new window)

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

示例 1:

  • 输入:nums = [-4,-1,0,3,10]
  • 输出:[0,1,9,16,100]
  • 解释:平方后,数组变为 [16,1,0,9,100],排序后,数组变为 [0,1,9,16,100]

示例 2:

  • 输入:nums = [-7,-3,2,3,11]
  • 输出:[4,9,9,49,121]

我写的算法:双指针

思路:左右两边其中一个肯定是最大的那一个,大的那一个放入数组,小的那个进入下一轮比较

/**
 * @param {number[]} nums
 * @return {number[]}
 */
var sortedSquares = function(nums) {
    let newNums=[];
    let left=0,right=nums.length-1;//左右指针
    while(left<=right){
        if(nums[left]**2>nums[right]**2){
            newNums.push(nums[left]**2)
            left++;
        }else{
            newNums.push(nums[right]**2)
            right--;
        }
    }
    
    return newNums.reverse()
};

reference