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