解题思路
此处撰写解题思路
这里非递减顺序排序,所以有三种情况
[0,1,2,3]全正
[-5,-4,-3]全负
[-5,0,5]由负到正
因为是平方的结果进行排序,我们观察到不论是哪种情况
最大值都在两侧所以我们可以在两侧设置指针,通过比较,如果是左边的结果大就移动左指针,反之则移动右指针
最终使指针重合
因为要取到最中间的那个值所以循环的判断条件应该包括等于
代码
class Solution {
public int[] sortedSquares(int[] nums) {
int length = nums.length;
int left = 0;
int right = length-1;
int[] results = new int[length];
int leftSquare;
int rightSquare;
while(left<=right){
leftSquare = nums[left]*nums[left];
rightSquare = nums[right]*nums[right];
if(leftSquare<=rightSquare){
results[length-1] = rightSquare;
right--;
}else{
results[length-1]=leftSquare;
left++;
}
length--;
}
return results;
}
}