https://leetcode-cn.com/problems/squares-of-a-sorted-array/

一 题目 s0977sortedSquares

给你一个按 非递减顺序 排序的整数数组 nums,返回 每个数字的平方 组成的新数组,要求也按 非递减顺序 排序。

示例 1: 输入:nums = [-4,-1,0,3,10] 输出:[0,1,9,16,100] 解释: 平方后,数组变为 [16,1,0,9,100]

排序后,数组变为 [0,1,9,16,100]

示例 2: 输入:nums = [-7,-3,2,3,11]

输出:[4,9,9,49,121]

提示:

  1. 1 <= nums.length <= 104
  2. -104 <= nums[i] <= 104
  3. nums 已按 非递减顺序 排序

进阶:请你设计时间复杂度为 O(n) 的算法解决本问题

二 题解

  1. class Solution {
  2. public int[] sortedSquares(int[] nums) {
  3. int[] arrays = new int[nums.length];
  4. int start = 0; // 双指针的头指针
  5. int end = nums.length -1; // 双指针的尾指针
  6. int tag = nums.length -1;
  7. int startSquareNum = 0;
  8. int endSquareNum = 0;
  9. while(start<end){
  10. startSquareNum = nums[start] * nums[start];
  11. endSquareNum = nums[end] * nums[end];
  12. if(startSquareNum > endSquareNum){
  13. arrays[tag] = startSquareNum;
  14. start++;
  15. }else{
  16. arrays[tag] = endSquareNum;
  17. end--;
  18. }
  19. tag--;
  20. }
  21. arrays[tag] = nums[end]*nums[end];
  22. return arrays;
  23. }
  24. }