容易想到的
理论上两个for(一个for+sort)是易想到的
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 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;
}
}
简单来说,找到分界,然后左边平方后递减,右边平方后递增,然后归并