# 有序数组的平方(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

# 双指针

左指针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