977. 有序数组的平方

本题的难点在于存在负数,我们知道非负数的平方数排序规则一定与

原数组顺序相同,但这里存在负数,导致无法直接确定

方法一:先计算出所有数的平方,然后排序

时间O(nlogn)(排序所用时间),空间O(logn)(排序所申请栈空间与深度有关,这里忽略了返回要求数组的空间)

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

方法二:使用双指针,头尾2个指针比较绝对值大小,然后倒叙填充返回数组

时间O(n),空间O(1)(这里不计算申请返回结果所申请的O(n)空间)

 1     public int[] sortedSquares(int[] nums) {
 2         int[] res = new int[nums.length];
 3         for(int i=0,j=nums.length-1,k=nums.length-1;i<=j;){
 4             if(Math.abs(nums[i])>Math.abs(nums[j])){
 5                 res[k--]=nums[i]*nums[i];
 6                 i++;
 7             }else{
 8                 res[k--]=nums[j]*nums[j];
 9                 j--;
10             }
11         }
12         return res;
13     }
争取早日不再是一只菜鸡
原文地址:https://www.cnblogs.com/jchen104/p/14699365.html