1.jpg

容易想到的

理论上两个for(一个for+sort)是易想到的

  1. class Solution {
  2. public int[] sortedSquares(int[] nums) {
  3. for (int i = 0; i < nums.length; ++i) {
  4. nums[i] = nums[i] * nums[i];
  5. }
  6. Arrays.sort(nums);
  7. return nums;
  8. }
  9. }

双指针

这一部分是双指针的,但是我还不懂啊…

官方答案:

  1. class Solution {
  2. public int[] sortedSquares(int[] nums) {
  3. int n = nums.length;
  4. int negative = -1;
  5. for (int i = 0; i < n; ++i) {
  6. if (nums[i] < 0) {
  7. negative = i;
  8. } else {
  9. break;
  10. }
  11. }
  12. int[] ans = new int[n];
  13. int index = 0, i = negative, j = negative + 1;
  14. while (i >= 0 || j < n) {
  15. if (i < 0) {
  16. ans[index] = nums[j] * nums[j];
  17. ++j;
  18. } else if (j == n) {
  19. ans[index] = nums[i] * nums[i];
  20. --i;
  21. } else if (nums[i] * nums[i] < nums[j] * nums[j]) {
  22. ans[index] = nums[i] * nums[i];
  23. --i;
  24. } else {
  25. ans[index] = nums[j] * nums[j];
  26. ++j;
  27. }
  28. ++index;
  29. }
  30. return ans;
  31. }
  32. }

简单来说,找到分界,然后左边平方后递减,右边平方后递增,然后归并