我的代码(没写出来)
我一直想原地操作,从两边向中间递进,但是操作过程会打乱数组原本中间大两头小的规律,所以不成功
结合官方写法之后的代码
class Solution {
public int[] sortedSquares(int[] nums) {
int[] ans=new int[nums.length];
int left=0;
int right=nums.length-1;
int i=nums.length;//标记结果数组的索引
while(left<=right){
if(nums[left]+nums[right]<0){
ans[--i]=nums[left]*nums[left];
left++;
}else{
ans[--i]=nums[right]*nums[right];
right--;
}
}
return ans;
}
}
官方解更好的地方
开一个新的数组
在判断使用left填充还是right填充的时候,可以不用先平方再判断,而是先判断再平方。(很巧妙的想法)