蓝桥杯ing·1

今天来做一道LeetCode吧。

 第一次代码(抄的):

# Definition for singly-linked list.
# class ListNode:
#     def __init__(self, val=0, next=None):
#         self.val = val
#         self.next = next
class Solution:
    def addTwoNumbers(self, l1: ListNode, l2: ListNode) -> ListNode:
        num1 = []
        num2 = []
        while l1:
            num1.append(l1.val)
            l1 = l1.next
        while l2:
            num2.append(l2.val)
            l2 = l2.next
        ret = len(num1) - len(num2)
        if ret < 0:
            ret *= -1
            num1.extend([0] * ret)
        elif ret > 0:
            num2.extend([0] * ret)
        ret = 0
        num3 = []
        for n1, n2 in zip(num1, num2):
            val = (n1 + n2 + ret) % 10
            num3.append(val)
            ret = (n1 + n2 + ret) // 10
        if ret != 0:
            num3.append(ret)
        result = None
        num3.reverse()
        for a in num3:
            result = ListNode(val=a, next=result)
        return result

通过是通过了,但是运行的结果不太理想。显然,速度和内存都不太行。

        好的,我们来优化我们的代码。

        首先,我们看到这个方法的一开始的思路是把ListNote类型的数据保存在列表中,在列表中进行运算后再将结果列表储存成ListNote类型。

        所以,我们可以先简化第一步,直接通过ListNote类型的数据进行运算,不将l1,l2转换为列表。代码如下:

# Definition for singly-linked list.
# class ListNode:
#     def __init__(self, val=0, next=None):
#         self.val = val
#         self.next = next
class Solution:
    def addTwoNumbers(self, l1: ListNode, l2: ListNode) -> ListNode:
        ret=0
        result=None
        num3=[]
        while l1 or l2:
            if l1==None:
                num1=0
            else:
                num1=l1.val
            if l2==None:
                num2=0
            else:
                num2 = l2.val
            value = (num1+num2+ret)%10
            num3.append(value)
            ret = (num1+num2+ret)//10
            if l1!=None:
                l1 = l1.next
            if l2!=None:
                l2 = l2.next
        if ret!=0:
            num3.append(ret)
        num3.reverse()
        for i in range(len(num3)):
            result=ListNode(val=num3[i] ,next=result)
        return result

        好了,进行多次试错后,成功运行。但是仅仅把速度提升了一点,并没有改变如此大的内存。

         啊,内存消耗仅仅击败了5%的用户(咸鱼瘫)。

         用时减少的原因:假设循环次数相同,那么相比第一次的代码,我优化后的代码已经减少了一个循环,所以会减少1/3的时间复杂度。

        但是...进行多次提交后,我发现...

        内存消耗一直保持比较高的状态;但是执行用时波动还挺大的。好吧,今天是一次无效的优化...

        

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

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值