解法:
这道题需要留意题目:按非递减顺序排序的数组,因此,我们知道在A平方后,原本是负数的一边是降序排序,原本是正数的一边是升序排序,因此在排序后我们可以用归并排序。
新建一个list B,找到第一个负数值的下标和第一个非负值的下标,进行归并排序。归并排序时需要注意,要优先处理越界情况。代码如下:
class Solution:
def sortedSquares(self, A: List[int]) -> List[int]:
length = len(A)
# 找第一个大于等于0的数
p=-1
for i in range(length):
if A[i]<0:
p=i
else:
break
# 重新排序并平方
B = []
q = p+1
while p>=0 or q<length:
if p<0:
B.append(A[q]*A[q])
q+=1
elif q==length:
B.append(A[p]*A[p])
p-=1
elif (-A[p]) >= A[q]:
B.append(A[q]*A[q])
q+=1
else:
B.append(A[p]*A[p])
p-=1
return B
复杂度分析:时间复杂度O(n), 空间复杂度O(n)