
解题思路:最简单的方法就是将数组 nums 中的数平方后直接排序然后放在另一个新建的数组中。
class Solution {
public int[] sortedSquares(int[] nums) {
int[] ans=new int[nums.length];
for (int i=0;i<nums.length;i++){
ans[i]=nums[i]*nums[i];
}
Arrays.sort(ans);
return ans;
}
}

class Solution {
public int[] sortedSquares(int[] nums) {
int n = nums.length;
int negative = -1;
for (int i = 0; i < n; ++i) {
if (nums[i] < 0) {
negative = i;
} else {
break;
}
}
int[] ans = new int[n];
int index = 0, i = negative, j = negative + 1;
while (i >= 0 || j < n) {
if (i < 0) {
ans[index] = nums[j] * nums[j];
++j;
} else if (j == n) {
ans[index] = nums[i] * nums[i];
--i;
} else if (nums[i] * nums[i] < nums[j] * nums[j]) {
ans[index] = nums[i] * nums[i];
--i;
} else {
ans[index] = nums[j] * nums[j];
++j;
}
++index;
}
return ans;
}
}
复杂度分析
时间复杂度:O(n)O(n),其中 nn 是数组 \textit{nums}nums 的长度。
空间复杂度:O(1)O(1)。除了存储答案的数组以外,我们只需要维护常量空间。