【leetcode系列】小菜鸡的leetcode第11题:有序数组的平方

*注意一下,能用简单加减乘除的,不要用**进行幂运算,内存和速度都消耗巨大。。。比较了一下运行结果,差点哭了,慢了不止一星半点

简单题,官方归为了双指针一类。

方法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


 

 

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值