977.有序数组的平方
题目:
双指针法
必须从最大的开始放入新数组。从最小的是不可以的。最小的也可能出现在旧数组nums的中间。我们是从两头开始找的。只能是最大。
版本1:
class Solution(object):
def sortedSquares(self, nums):
new = [float('inf')] * len(nums)
end = len(nums) - 1
left, right = 0, end
while left != right:
if nums[left] * nums[left] < nums[right] * nums[right]:
new[end] = nums[right] * nums[right]
right -= 1
else:
new[end] = nums[left] * nums[left]
left += 1
end -= 1
new[0] = nums[left] * nums[left]
return new
可改进的地方:while的不等于变成小于等于,就可以不写倒数第二行多余的代码了。
版本2:
class Solution(object):
def sortedSquares(self, nums):
new = [float('inf')] * len(nums)
end = len(nums) - 1
left, right = 0, end
while left <= right:
if nums[left]**2 < nums[right]**2:
new[end] = nums[right]**2
right -= 1
else:
new[end] = nums[left]**2
left += 1
end -= 1
return new
问题
-
new = [] 是不可以的。因为后面要从最后一个元素开始往前面加。应该用 new = [float(‘inf’)] * len(nums) 提前分配好。new 的元素为无穷大的浮点数。
-
可用 a**2 代替 a * a 。
-
自己做题的时候喜欢用wihle,但每次都要自己在最后一行自己对i值进行自加,有时候忘了还会导致死循环。以后注意使用for。