1. 程式人生 > 實用技巧 >一個名詞“非遞減有序數列”引發的事故

一個名詞“非遞減有序數列”引發的事故

描述:一個非遞減有序數列,返回每個數字的平方組成的新陣列,這個新陣列也需要滿足非遞減有序數列

名詞普及

非遞減有序數列:意思是關鍵字遞增序排列,但是並非單調遞增(因為有重複的關鍵字)從小到大或者允許中間有相等的情形
    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);