给定一个按非递减顺序排序的整数数组 A
,返回每个数字的平方组成的新数组,要求也按非递减顺序排序。
示例 1:
输入:[-4,-1,0,3,10] 输出:[0,1,9,16,100]
示例 2:
输入:[-7,-3,2,3,11] 输出:[4,9,9,49,121]
提示:
1 <= A.length <= 10000
-10000 <= A[i] <= 10000
A
已按非递减顺序排序。
public int[] sortedSquares(int[] A) {
int[] nums = new int[A.length];
for (int i = 0; i < A.length; i++) {
nums[i] = A[i] * A[i];
}
quickStart(0, A.length - 1, nums);
return nums;
}
public static void quickStart(int left, int right, int[] nums) {
if (left >= right) {
return;
}
int dempLeft = left, dempRight = right;
while (dempLeft != dempRight) {
while (dempLeft < dempRight && nums[dempRight] >= nums[left]) {
dempRight--;
}
while (dempLeft < dempRight && nums[dempLeft] <= nums[left]) {
dempLeft++;
}
if (dempLeft != dempRight) {
swap(nums, dempLeft, dempRight);
}
}
if (left != dempLeft) {
swap(nums, left, dempLeft);
}
quickStart(left, dempLeft - 1, nums);
quickStart(dempRight + 1, right, nums);
}
private static void swap(int[] nums, int i, int j) {
int num = nums[i];
nums[i] = nums[j];
nums[j] = num;
}