*注意一下,能用简单加减乘除的,不要用**进行幂运算,内存和速度都消耗巨大。。。比较了一下运行结果,差点哭了,慢了不止一星半点
简单题,官方归为了双指针一类。
方法1这里用了俩函数,list.sort()和sorted(),区别在于前者直接在原列表中排序,后者则开辟新的空间生成一个新的排序后的列表
解法对比如下:
class Solution:
def sortedSquares(self, nums: List[int]) -> List[int]:
new_nums=list(map(lambda x:x*x,nums)#map含义为重复操作,lambda是定义一个匿名函数操作
new_nums.sort()#在原列表中排序,不开辟新内存
#new_nums=sorted(new_nums)#生成一个新的列表
return new_nums
其中list.sort()结果:
sorted()结果:
官方解法,更简单一些
class Solution:
def sortedSquares(self, nums: List[int]) -> List[int]:
return sorted(num * num for num in nums)
#时间复杂度:O(nlogn),其中 n 是数组nums 的长度。
#空间复杂度:O(logn)。除了存储答案的数组以外,我们需要O(logn) 的栈空间进行排序。
高级一点的双指针算法:(虽然这题没啥必要)
#本体有个trick,因为按照升序排列。所以可以用这种方法
class Solution:
def sortedSquares(self, nums: List[int]) -> List[int]:
i,j,k=0,len(nums)-1,len(nums)-1
sort_nums=[0]*len(nums)
while i<=j:
if nums[i]* nums[i] < nums[j]* nums[j]:
sort_nums[k]=nums[j]* nums[j]
j-=1
else:
sort_nums[k]=nums[i]* nums[i]
i+=1
k-=1
return sort_nums