LeetCode:977. Squares of a Sorted Array - Python

977. Squares of a Sorted Array

问题描述:

Given an array of integers A sorted in non-decreasing order, return an array of the squares of each number, also in sorted non-decreasing order.

Example 1:

Input: [-4,-1,0,3,10]
Output: [0,1,9,16,100]
Example 2:

Input: [-7,-3,2,3,11]
Output: [4,9,9,49,121]

Note:

1 <= A.length <= 10000
-10000 <= A[i] <= 10000
A is sorted in non-decreasing order.

问题分析:

这个题目很简单,如果直接用排序的话,python也就一两代码的事情,但是时间复杂度一般最少为O(NlogN),很显然题目希望的时间复杂度是O(N)。如果没有负数的话,直接扫描一边就可以了。如果存在负数的情况那?

(1)因为要考虑负数的情况,所以,可以想到的方法是两路归并

(2)先找到了列表的正负值的分界点。

(3)从分界点中,设置两个指针,一个向前处理,一个向后处理,并相互比较,归并到一个列表里。

(4)其中要注意,列表的边界等问题。

Python3实现:

class Solution():
    def sortedSquares(self, A):
        N = len(A)
        j = 0  # i, j,表示两个指针,分别从正负界限,指向负数部分,和正数部分
        while j < N and A[j] < 0:
            j += 1
        i = j - 1

        res = []
        while 0 <= i and j < N:  # 归并操作, 谁的平方小,谁先输出
            if A[i]**2 < A[j]**2:
                res.append(A[i]**2)
                i -= 1
            else:
                res.append(A[j]**2)
                j += 1

        while i >= 0:  # 如果,负数部分没有输出完,则直接输出
            res.append(A[i]**2)
            i -= 1
        while j < N:  # 如果,正数部分没有输出完,则直接输出
            res.append(A[j]**2)
            j += 1

        return res


if __name__ == '__main__':
    solu = Solution()
    A = [4, 5, 0, -2, -3, 1]
    print(solu.sortedSquares(A))

声明: 总结学习,有问题或不当之处,可以批评指正哦,谢谢。

题目链接参考链接

猜你喜欢

转载自blog.csdn.net/XX_123_1_RJ/article/details/86568877