给你一个按 非递减顺序 排序的整数数组 nums
,返回 每个数字的平方 组成的新数组,要求也按 非递减顺序 排序。
解法一:暴力求解,先挨个求平方再排序
class Solution:
def sortedSquares(self, nums: List[int]) -> List[int]:
for i in range(len(nums)):
nums[i] *=nums[i]
nums.sort()
return nums
或者用列表推导一行解决
class Solution:
def sortedSquares(self, nums: List[int]) -> List[int]:
return sorted(x**2 for x in nums)
解法二:双指针。因为是有序数组所以顺序更改只会出现在负数平方了之后变正数的情况,所以使用两个指针分别对左端和右端平方并比较大小,不断的将大的值加入新列表都右端。
有些题解中定义数组用到了float('inf'),
在Python中,float('inf')
是一种表示正无穷大的方法。inf
是无穷大(infinity)的缩写。在数学中,无穷大是比任何实数都大的数。在Python中,它是float
类型,可以用于比较操作或作为数学运算中的一个边界值。个人理解其实用其他任意值也行但就是有bug的时候不好找不容易直接定位到bug位置。
class Solution:
def sortedSquares(self, nums: List[int]) -> List[int]:
l = 0
r = len(nums)-1
i = len(nums)-1
# newlist = [float('inf')] *len(nums
newlist = [0] *len(nums)
while l <= r:
if nums[l]**2 < nums[r]**2:
newlist[i] = nums[r]**2
r-= 1
else:
newlist[i] = nums[l]**2
l+=1
i -= 1
return newlist