给定一个按非递减顺序排序的整数数组 A,返回每个数字的平方组成的新数组,要求也按非递减顺序排序。
输入:[-4,-1,0,3,10]
输出:[0,1,9,16,100]
题解:双指针法,先遍历数组,找出绝对值最小的数start作为起始,设置两个指针left、right,在数组中,left向左移动,right向右移动,设置一个新数组,长度等于A的长度,第一个元素填入start,第二个元素填入A[left]、A[right]中较小的那一个,然后left指针左移或right指针右移(指向被填入数的指针移动),当一个指针移出数组边界后,直接依次填入另一个指针指向的及其后面的数
class Solution {
public int[] sortedSquares(int[] A) {
int start=-1;
for(int i=0;i<A.length;i++){
if(A[i]>=0){
if(i>0&&A[i]<A[i-1]) {
start = i - 1;
}else{
start=i;
}
break;
}else{
A[i]*=-1;
}
}
if(start==-1)
start=A.length-1;
int left=start-1;
int right=start+1;
int[]ans=new int[A.length];
for(int i=0;i<A.length;i++){
if(i==0) {
ans[0] = A[start] * A[start];
continue;
}
if(left>=0&&right<A.length){
if(A[left]>=A[right]){
ans[i]=A[right]*A[right];
right++;
}else{
ans[i]=A[left]*A[left];
left--;
}
}else if(left>=0){
ans[i]=A[left]*A[left];
left--;
}else if(right<A.length){
ans[i]=A[right]*A[right];
right++;
}
}
return ans;
}
}