方法二核心思想:双指针。平方后根据左右指针指向的数组元素进行排序,并挪动相应的指针。
//方法一
class Solution {
public int[] sortedSquares(int[] nums) {
for(int i=0;i<nums.length;i++){
nums[i]=nums[i]*nums[i];//先平方
}
Arrays.sort(nums);//后排序
return nums;
}
}
//方法二:双指针
class Solution {
public int[] sortedSquares(int[] nums) {
int[] newNums=new int[nums.length];//新数组用来往回传平方后排好序的数组
int left=0,right=nums.length-1;//定义左右指针
for(int i=0;i<nums.length;i++){
nums[i]=nums[i]*nums[i];//平方
}
for(int i=nums.length-1;i>=0;i--){
if(nums[right]>nums[left]){//判断左右指针指向的数组元素谁大谁小
newNums[i]=nums[right--];//右边大则将其存放在newNums数组下标最大的位置,并且右指针向左移动一格
}else newNums[i]=nums[left++];//左边大则将其存放在newNums数组下标最大的位置,并且左指针向右移动一格
}
return newNums;//返回有序数组
}
}