zoukankan      html  css  js  c++  java
  • 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     }
    争取早日不再是一只菜鸡
  • 相关阅读:
    js正则表达式中的问号使用技巧总结
    380. Insert Delete GetRandom O(1)
    34. Find First and Last Position of Element in Sorted Array
    162. Find Peak Element
    220. Contains Duplicate III
    269. Alien Dictionary
    18. 4Sum
    15. 3Sum
    224. Basic Calculator
    227. Basic Calculator II
  • 原文地址:https://www.cnblogs.com/jchen104/p/14699365.html
Copyright © 2011-2022 走看看