class Solution:
def sortedSquares(self, nums: List[int]) -> List[int]:
l,r,k = 0,len(nums)-1,len(nums)-1
res = [float("inf")] * len(nums)
while l <= r:
if nums[l]**2 < nums[r]**2:
res[k] = nums[r]**2
r -= 1
else:
res[k] = nums[l]**2
l += 1
k -= 1
return res
这段代码实现了一个函数 sortedSquares,它接受一个整数列表 nums 作为输入,并返回该列表中每个数字的平方,且结果是升序排列的。
代码细节解释:
变量初始化:
l: 用于指向列表的左侧(最小值)开始的位置,初始化为 0。
r: 用于指向列表的右侧(最大值)开始的位置,初始化为 len(nums) - 1。
k: 用于追踪结果数组 res 中要插入元素的位置,初始化为 len(nums) - 1(即数组的最后一个索引)。
res: 用来存储结果的数组,初始化时填充为无穷大 (float(“inf”)),以确保后续的替换操作能正确进行。
主循环逻辑:
当 l 小于或等于 r 时,循环会继续。
比较 nums[l]**2 和 nums[r]**2:
如果左侧平方小于右侧平方,则将右侧平方存入 res[k],并将 r 向左移动(减少1)。
否则,将左侧平方存入 res[k],并将 l 向右移动(增加1)。
然后,k 减少1,以指向下一个要填入的索引。
返回结果:
当循环结束后,res 数组就包含了排序过的平方值,程序将其返回。