一、题目内容 简单

给你一个按 非递减顺序 排序的整数数组 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]

提示:

  • 1 <= nums.length <= 104
  • -104 <= nums[i] <= 104
  • nums 已按 非递减顺序 排序

    二、解题思路

    1. 暴力解法

    逐个计算,然后排序

    2. 双指针

    由于数组是排序过的,以非递减的形式。
    那么从最左边 和 最右边两个开始比对,慢慢往中间移动

    三、具体代码

    1. /**
    2. * @param {number[]} nums
    3. * @return {number[]}
    4. */
    5. var sortedSquares = function (nums) {
    6. // nums 是非递减的,题目的意思其实是递增的意思
    7. const result = []
    8. for (let left = 0, right = nums.length - 1; left <= right;) {
    9. const leftSquare = nums[left] * nums[left]
    10. const rightSquare = nums[right] * nums[right]
    11. if (leftSquare > rightSquare) {
    12. result.unshift(leftSquare)
    13. left++
    14. } else {
    15. result.unshift(rightSquare)
    16. right--
    17. }
    18. }
    19. return result
    20. };

    四、其他解法