一个名词“非递减有序数列”引发的事故

描述:一个非递减有序数列,返回每个数字的平方组成的新数组,这个新数组也需要满足非递减有序数列

名词普及

非递减有序数列:意思是关键字递增序排列,但是并非单调递增(因为有重复的关键字)从小到大或者允许中间有相等的情形
    1, 2, 3, 4, 5 递增排列
    9, 8, 7, 6, 5 递减排列
    1,2,3,3,4,5,8,8 非递减排列
    9,8,7,7,6,5,5,2,1 非递增排列

一、Map

let arr = [-4,-1,0,3,4,10];

function squareArray(data){
    let newArr = data.map(ele=>{
        return Math.pow(ele,2) 
    })
    return newArr.sort(function(a,b){return a-b})
}

var res = squareArray(arr);
console.log(res);

二、双指针

var squareArray = function(A) {
    let res = []
    let left = 0
    let right = A.length - 1  //5
    let index = right   //用这个记录位置
    while(left <= right) {
        let num1 = A[left]**2  //16
        let num2 = A[right]**2 //100 16
        if(num2 > num1) {
            res[index] = num2   [n,n,9,n,n,100]
            right--  //4 3 2
        }else {
            res[index] = num1  [0,1,n,16,16,100]
            left++   //1 2 3
        }
        index--   //4 3 2 1 0
    }
    return res
};

var res = squareArray(arr);
console.log(res);
原文地址:https://www.cnblogs.com/qjsbk/p/13825511.html