写题的时候不想用暴力法,结果在排序那里死磕好久,道理都明白,上手写的时候总是差一点...
双指针法:
class Solution:
def sortedSquares(self, nums: List[int]) -> List[int]:
l, r, i = 0, len(nums) - 1, len(nums) - 1
res = [float('inf')] * len(nums)
while l <= r:
if nums[l] ** 2 < nums[r] ** 2:
res[i] = nums[r] ** 2
r -= 1
else:
res[i] = nums[l] ** 2
l += 1
i -= 1
return res
根据需求比较两个指针所指向的元素,并根据比较结果来决定移动哪个指针。左指针会向右移动,右指针会向左移动,直到它们相遇或交叉。
还有需要注意的是:
res = [float('inf')] * len(nums)
初始化这个新的数组时,由于原数组中的元素是整数,因此不会出现与 float('inf')
相同的值,这样可以避免在填充过程中产生错误。