给定一个按非递减顺序排序的整数数组 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[] nums) {
int[] res = new int[nums.length];
for(int i=0;i<nums.length;i++) {
res[i] = nums[i]*nums[i];
}
Arrays.sort(res);
return res;
}
思路二、双指针,逆序来存取
// 第二种思路
public int[] sortedSquares_2(int[] nums) {
int[] res = new int[nums.length];
int index = nums.length-1;
int left = 0;
int right = nums.length-1;
while(left<=right) {
if(nums[left]*nums[left]>=nums[right]*nums[right]) {
res[index--] = nums[left]*nums[left];
left++;
}else {
res[index--] = nums[right]*nums[right];
right--;
}
}
return res;
}