思路:暴力法:全部平方,然后调用排序API,排序算法最快是N*log(N)时间复制度。
双指针法:要利用好原本的数组本就是有序的数组这个条件,
只是有负数 导致平方后变大了,那么平方后的最大值就是在两端取到的,且逐渐往中间变小;所以新建一个数组用来存放平方后的内容,新建两个指针在老数组左右边界,往中间遍历,谁平方大谁就入新数组,再顺便移动边界。
class Solution {
public int[] sortedSquares(int[] nums) {
int [] ans = new int[nums.length];
//老数组的左右边界下标
int l = 0;
int r = nums.length -1;
//填充新数组
for(int i=ans.length-1;i>=0;i--) {
if(nums[l]*nums[l] <= nums[r]*nums[r]){
ans[i] = nums[r]*nums[r];
r--;
}else {
ans[i] = nums[l]*nums[l];
l++;
}
}
return ans;
}
}