题目:
给你一个按 非递减顺序 排序的整数数组 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]
题意为一个升序数组进行平方后返回升序的新数组
// 双指针解法
function orderArrSquare(arr = []) {
const result = new Array(arr.length)
let left = 0, // 数组左边的指针
right = arr.length - 1, // 数组右边的指针
k = right // 结果集插入位置的索引 因为是非递减序列 所以每次比较产生一个较大值 从后往前插
while (left <= right) {
// 这里是<=是最后指针相撞时也要比较
if (arr[left] * arr[left] > arr[right] * arr[right]) {
result[k--] = arr[left] * arr[left]
left++ // 左边大放入结果集 索引+1
continue
}
result[k--] = arr[right] * arr[right]
right-- // 右边大放入结果集 索引-1
}
return result
}
console.log(orderArrSquare([-2, 0, 4, 5, 6]))