Leetcode 977:有序数组的平方(超详细的解法!!!)

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

示例 1:

输入:[-4,-1,0,3,10]
输出:[0,1,9,16,100]

    1
    2

示例 2:

输入:[-7,-3,2,3,11]
输出:[4,9,9,49,121]

    1
    2

提示:

    1 <= A.length <= 10000
    -10000 <= A[i] <= 10000
    A 已按非递减顺序排序。

解题思路

使用暴力破解,先求所有数的平方然后对求得的数进行排序。

class Solution:
    def sortedSquares(self, A):
        """
        :type A: List[int]
        :rtype: List[int]
        """
        return sorted([i**2 for i in A])

    1
    2
    3
    4
    5
    6
    7

这种做法的时间复杂度是O(nlogn),我们还有一种更快的做法。通过建立左右两个指针,然后比较左右两个指针所指向的值的绝对值那个更大,更大的那个显然就应该放到后面,然后接着比较即可。

class Solution:
    def sortedSquares(self, A):
        """
        :type A: List[int]
        :rtype: List[int]
        """
        i, j = 0, len(A)-1
        res = [0]*len(A)
        for k in range(len(A)-1, -1, -1):
            if abs(A[i]) < abs(A[j]):
                res[k] = A[j]**2
                j -= 1
            else:
                res[k] = A[i]**2
                i += 1
            k -= 1
                
        return res

    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18

徐然这种做法的时间复杂度是O(n),但是实际测试的时候并没有快上很多。

我将该问题的其他语言版本添加到了我的GitHub Leetcode

如有问题,希望大家指出!!!
---------------------
作者:coordinate_blog
来源:CSDN
原文:https://blog.csdn.net/qq_17550379/article/details/86563977
版权声明:本文为博主原创文章,转载请附上博文链接!

posted @ 2019-07-30 23:02  天涯海角路  阅读(189)  评论(0)    收藏  举报