1、题目描述
https://leetcode-cn.com/problems/squares-of-a-sorted-array/
给定一个按非递减顺序排序的整数数组 A
,返回每个数字的平方组成的新数组,要求也按非递减顺序排序。
输入:[-4,-1,0,3,10]
输出:[0,1,9,16,100]
输入:[-7,-3,2,3,11]
输出:[4,9,9,49,121]
1 <= A.length <= 10000
-10000 <= A[i] <= 10000
A
已按非递减顺序排序。
2、代码详解
法一(推荐):双指针 O(N)
同样地,我们可以使用两个指针分别指向位置 0 和 n-1,每次比较两个指针对应的数,选择较大的那个逆序放入答案并移动指针。这种方法无需处理某一指针移动至边界的情况。
class Solution(object):
def sortedSquares(self, A):
"""
:type A: List[int]
:rtype: List[int]
"""
n = len(A)
ans = [0] * n
i, j, pos = 0, n - 1, n - 1
while i <= j:
if A[i] * A[i] > A[j] * A[j]:
ans[pos] = A[i] * A[i]
i += 1
else:
ans[pos] = A[j] * A[j]
j -= 1
pos -= 1
return ans
法二:排序
return sorted(num * num for num in A)
时间复杂度:O(nlogn)
空间复杂度:O(logn)。除了存储答案的数组以外,我们需要 O(\log n)O(logn) 的栈空间进行排序。