# 有序数组的平方(977)
# 题目
给定一个按非递减顺序排序
的整数数组 A,返回每个数字的平方组成的新数组,要求也按非递减顺序排序
。
# 示例
输入:[-4,-1,0,3,10]
输出:[0,1,9,16,100]
输入:[-7,-3,2,3,11]
输出:[4,9,9,49,121]
# 算法
# 先平方后排序
function sortedSquares(A) {
return A.map(item=>item*item).sort((a,b)=>a-b)
}
1
2
3
2
3
# 双指针
左指针l
指向数组第一个元素,右指针r
指向数组最后一个元素
判断左右指针指向的元素的绝对值哪一个比较大,大的值平方后插入结果数组的第一项,然后将指向绝对值大的值的指针向中间移动一位
循环的结束条件是左指针大于右指针
function sortedSquares(A) {
let l = 0,
r = A.length - 1;
let res = [];
while (l <= r) {
if (Math.abs(A[l]) > Math.abs(A[r])) {
res.unshift(Math.pow(A[l], 2));
l++;
} else {
res.unshift(Math.pow(A[r], 2));
r--;
}
}
return res;
}
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
2
3
4
5
6
7
8
9
10
11
12
13
14
15