一、
我的思路:拿一个栈一开始进栈直到遇到正数。
然后记录遇到负数的这个坐标,然后依次比较出栈的,和i依次往后迭代的数的大小。
from typing import List
class Solution:
def sortedSquares(self, A: List[int]) -> List[int]:
ans = []
my_stack = [] # 用来存反序的从小到大
i = 0
while i < len(A) and A[i] < 0:
my_stack.append(A[i])
i += 1
while i < len(A) or len(my_stack) > 0:
if len(my_stack) > 0 and (i >= len(A) or abs(my_stack[-1]) < abs(A[i])):
ans.append(pow(my_stack.pop(), 2))
else:
ans.append(pow(A[i], 2))
i += 1
return ans
二、
我的思路的缺点:空间复杂度是O(n), 可以通过一个变量来代替这个栈的作用。
一直自增当前下标,直到遇到正数,然后赋值n,i继续自增,n开始自减,并且比较大小,大概同上
三、
更巧妙的思路:数组小的在中间,大的在两边,所以可以从两边到中间的比较,然后ans是从大到小排序,然后反转。