思路:观察得到,左右的平方数肯定比中间的平方数大,所以比较最左和最右的平方数,哪个大就放到最后就行。
class Solution {
public int[] sortedSquares(int[] nums) {
//因为平方数的话,两边的值肯定比中间大,所以先比较最前和最后的平方值,看哪一个大就放到最后
int[] result = new int[nums.length];
int k = nums.length-1;
int i = 0;
int j = nums.length-1;
while(i<=j){
//后面平方比前面大的情况
if(nums[i]*nums[i]<nums[j]*nums[j]){
result[k--] = nums[j]*nums[j];
j--;
//前面平方大于等于后面的平方的情况
}else{
result[k--] = nums[i]*nums[i];
i++;
}
}
return result;
}
}
时间复杂度:O(n)
空间复杂度:O(n)
本文章只做笔记用途,谢谢观看!
参考:代码随想录