题目描述
有序数组的平方
给定一个按非递减顺序排序的整数数组 A,返回每个数字的平方组成的新数组,要求也按非递减顺序排序。
示例 1:
输入:[-4,-1,0,3,10]
输出:[0,1,9,16,100]
示例 2:
输入:[-7,-3,2,3,11]
输出:[4,9,9,49,121]
提示:
1 <= A.length <= 10000
-10000 <= A[i] <= 10000
A 已按非递减顺序排序。
解决方法
方法一:归并排序
- 用两个指针分别读取数组的非负部分与负数部分 —— 指针 i 反向读取负数部分,指针 j 正向读取非负数部分。
class Solution:
def sortedSquares(self, A):
"""
:type A: List[int]
:rtype: List[int]
"""
N = len(A)
j = 0
while A[j]<0 and j<N-1:
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
Time Complexity: O ( n ) O(n) O(n)
方法二:排序
class Solution:
def sortedSquares(self, A):
return sorted(x*x for x in A)
Time Complexity: O ( n l o g n ) O(nlogn) O(nlogn)