有序数组的平方(双指针解法JS)
// 有序数组的平方
// 给你一个按 非递减顺序 排序的整数数组 nums,返回 每个数字的平方 组成的新数组,要求也按 非递减顺序 排序。
// 双指针法:
// 数组其实是有序的, 只不过负数平方之后可能成为最大数了。
// 那么数组平方的最大值就在数组的两端,不是最左边就是最右边,不可能是中间。
// 此时可以考虑双指针法了,i指向起始位置,j指向终止位置。
// 定义一个新数组result,和A数组一样的大小,让k指向result数组终止位置。
let nums = [-4, -2, 0, 1, 2, 4]
function sortedSquares(arr) {
let length = arr.length
// 定义一个一样长度的数组,将其元素全部置为 0
let res = new Array(length).fill(0)
// i指向数组的初始位置,j指向数组最后一位
let i = 0, j = arr.length - 1
// k指向返回的数组的最后一位
let k = res.length - 1
while (i <= j) {
let left = arr[i] * arr[i], right = arr[j] * arr[j]
if (left < right) {
res[k--] = right
j--
} else {
res[k--] = left
i++
}
}
return res
}
console.log(sortedSquares(nums));