?
class Solution {
/**
思路:
前后指针, L 指针从左往右遍历, R 指针从右往左遍历, 因为数组是非递减的
所以如果左边有负数的话, 那么这些负数的平方的从左到右顺序是递增的, 那么此时
整个数组的每个元素的平方构成的序列就是这样的, 比如说:
-4 -1 0 3 10
16 1 0 9 100
左右两边各自有序, 我们通过归并的思想, 变为整体有序
*/
public int[] sortedSquares(int[] nums) {
int[] ans = new int[nums.length];
int L = 0;
int R = nums.length - 1;
int index = nums.length - 1;
while (L < R) {
int left = nums[L] * nums[L];
int right = nums[R] * nums[R];
if (left <= right) {
ans[index--] = right;
R--;
} else {
ans[index--] = left;
L++;
}
}
ans[0] = nums[L] * nums[L];
return ans;
}
}
|