LeetCode #977. Squares of a Sorted Array

题目

977. Squares of a Sorted Array


解题方法

双指针法,先从头开始遍历数组,遍历过程中给每个数取平方,直到遇到第一个非负数,此时设置j为最后一个负数。再从这个位置开始向两端遍历数组,比较A[i]和A[j]的大小关系,将小的放入rat中,如果放的是A[i],则需要对下一位A[i+1]取平方。这样操作直到i或j触底,之后再把没触底的一个指针遍历完即可。
时间复杂度:O(n)
空间复杂度:O(n)


代码

class Solution:
    def sortedSquares(self, A: List[int]) -> List[int]:
        i = 0
        while i < len(A) and A[i] < 0:
            A[i] *= A[i]
            i += 1
        else:
            if i < len(A):
                A[i] *= A[i]
        
        j = i - 1
        rat = []
        while i < len(A) and j > -1:
            if A[i] > A[j]:
                rat.append(A[j])
                j -= 1
            else:
                rat.append(A[i])
                i += 1
                if i < len(A):
                    A[i] *= A[i]
        
        while i < len(A):
            rat.append(A[i])
            i += 1
            if i < len(A):
                A[i] *= A[i]
        while j > -1:
            rat.append(A[j])
            j -= 1
        
        return rat
posted @ 2020-11-23 10:10  老鼠司令  阅读(65)  评论(0)    收藏  举报