最简单的办法肯定是先将数组中的值平方,然后调用方法sort(),这里给出双指针法
class Solution(object):
def sortedSquares(self, nums):
"""
:type nums: List[int]
:rtype: List[int]
"""
# 双指针法
# 非递减顺序的整数数组有三种情况“
# 1.非负数,平方后还是非递减
# 2.负数,平方后是非递增
# 3.有正有负,要具体考虑
result = [-1]*len(nums)
l, r = 0, len(nums) - 1
# 为了减少空间复杂度,直接在原数组上进行赋值,需要一个变量记录赋值的位置
# 先找大的,从后往前赋值
post = len(nums) - 1
# 为什么可以判断两边的大小,逐渐往中间靠?
# 考虑数组的三种情况,其中1,2种情况肯定没问题
# 第三种情况,有正有负,此时平方后的最大值,一定在两边,最小值一定在中间,所以才可以判断两边最大值,放入数组中,然后逐渐往中间靠
while l <= r:
if nums[l]*nums[l] > nums[r]*nums[r]:
result[post] = nums[l]*nums[l]
l += 1
else:
result[post] = nums[r]*nums[r]
r -= 1
post -= 1
return result
|