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

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

    方法一:遍历后排序

    1. var sortedSquares = function (nums) {
    2. for (let i = 0; i < nums.length; i++) {
    3. nums[i] = Math.pow(nums[i], 2)
    4. }
    5. return nums.sort((a, b) => a - b)
    6. };

    方法二:双指针法
    通过前后两个指针判断绝对值最大值,然后注入新数组的最后面

    1. var sortedSquares = function (nums) {
    2. let i = 0; // 左指针
    3. let j = nums.length-1; // 右指针
    4. let index = nums.length-1; // 新数组的序列
    5. let arr = [] // 新数组
    6. while(index>=0){
    7. if(Math.abs(nums[i])>Math.abs(nums[j])){
    8. arr[index] = nums[i]*nums[i]
    9. i++
    10. }else{
    11. arr[index] = nums[j]*nums[j]
    12. j--
    13. }
    14. index--
    15. }
    16. return arr
    17. };