1.暴力排序
class Solution {
public int[] sortedSquares(int[] nums) {
for(int i=0;i<nums.length;i++){
nums[i]=nums[i]*nums[i];
}
sort(nums,0,nums.length-1);
return nums;
}
public static void sort(int[] nums,int l,int r){
if(l<r){
int x=nums[l];
int i=l;
int j=r;
while(i<j){
while (i < j && nums[j]>x) {
j--;
}
if(i<j){
nums[i++]=nums[j];
}
while(i<j&&nums[i]<x){
i++;
}
if(i<j){
nums[j--]=nums[i];
}
}
nums[i]=x;
sort(nums,l,i-1);
sort(nums,i+1,r);
}
}
}
2.双指针法
/**
* 因为数组是递增的。所以平方后最大的两个值一定是在数组的两侧,数组两侧进行比较可以用双指针法
* @param nums
* @return
*/
public static int[] sortedSquares(int[] nums) {
int i=0;
int j=nums.length-1;
int k=nums.length;
int[] newNum=new int[k];
while(i<=j&&i>=0){
if(nums[j]*nums[j]>=nums[i]*nums[i]){
newNum[k-1]=nums[j]*nums[j];
k--;
j--;
}else {
newNum[k-1]=nums[i]*nums[i];
k--;
i++;
}
}
return newNum;
}