题目

算法1(易想)
- 先平方,再排序,即
return sorted(nums[i]**2 for i in nums])
算法2(双指针法)
- 如果原序列包含正、负数,则原来序列的平方按递减到零再递增的规律分布
- 这种U型分布下,可以采用双指针法,从两头到中间逼近,比较两个指针所指元素平方的大小并排序
- 申请一个和原序列同样大小的空LIst,从最后一个元素(最大元素)开始填充
- 如果序列为非负序列或者非正序列,该方法同样适用
代码2
class Solution:
def sortedSquares(self, nums: List[int]) -> List[int]:
length = len(nums)
left,right = 0,length-1
ans = [0]*length
cur = length -1
while right > left:
if nums[right]**2>nums[left]**2 :
ans[cur] = nums[right]**2
right -= 1
else:
ans[cur] = nums[left]**2
left += 1
cur -= 1
ans[0] = nums[left]**2
return ans
cheat sheet
- 申请空列表操作
ans = [0]*len
- 注意:变量名不得与函数重名
- 连加操作
+=
,中间没有空格 - 注意不要混淆下标和数值