描述:一个非递减有序数列,返回每个数字的平方组成的新数组,这个新数组也需要满足非递减有序数列
名词普及
非递减有序数列:意思是关键字递增序排列,但是并非单调递增(因为有重复的关键字)从小到大或者允许中间有相等的情形
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);