方法一:就是需要一个新的额外空间,从原数组的两边取数字,因为最大值不是在 左边就是在最右边,所以只需要对比两边的绝对值
class Solution {
public int[] sortedSquares(int[] A) {
int [] a=new int[A.length];
int i=0;
int j=A.length-1;
for(int p=A.length-1;p>=0;p--){
if(Math.abs(A[i])>Math.abs(A[j])){
a[p]=A[i]*A[i];
i++;
}else{
a[p]=A[j]*A[j];
j--;
}
}
// a[p] =Math.abs(A[i])>Math.abs(A[j])?A[i]*A[i++]:A[j]*A[j--];
/**
上面的for循环里面一坨可以用上面这句话代替,但是注意的是i++和j--的位置一定要放对,如果放不对请写在这句话的下面,分开写,不要写在里面,很容易出错
还有就是对三目表达式用的居然用错了,看来我真的太菜了,一定要多看这句话,嗯,我要多看
*/
return a;
}
}
方法二:最笨的方法,不需要额外空间,就是先取绝对值,然后排序,在平方,我是真的弱
class Solution {
public int[] sortedSquares(int[] A) {
for(int i=0;i<A.length;i++){
A[i]=abs(A[i]);
}
for(int i=0;i<A.length-1;i++){
for(int j=0;j<A.length-1-i;j++){
if(A[j]>A[j+1]){
int temp=A[j];
A[j]=A[j+1];
A[j+1]=temp;
}
}
}
pingfang(A);
return A;
}
public int abs(int a){
if(a<0){
return -a;
}
return a;
}
public void pingfang(int[] a){
for(int i=0;i<a.length;i++){
a[i]=a[i]*a[i];
}
}
}
方法三:本来想在讨论区找一下的,找了两页几乎都是新建数组,那就什么时候看到了再补充,对 我就是这么懒,emmm