为了账号安全,请及时绑定邮箱和手机立即绑定

Python Bug:字典在 Leetcode 中向后迭代

Python Bug:字典在 Leetcode 中向后迭代

繁花如伊 2022-11-09 17:12:57
我试图解决问题1313。在 Leetcode 上解压缩运行长度编码列表,我的代码在我的 IDE 上运行完美,但是当我在 Leetcode 上提交它时,有时,字典会向后迭代,导致我的输出列表顺序相反. 我 95% 确定我的代码是正确的,因为它在字典在同一个测试用例上向后迭代之前通过了 3-4 个测试用例。这是一个错误,还是我的代码有问题?谢谢你的帮助!class Solution(object):    def decompressRLElist(self, nums):        """        :type nums: List[int]        :rtype: List[int]        """        d = {}        l = []        for i in range(0, len(nums), 2):            d[nums[i+1]] = nums[i]        print(d)        for (k,v) in d.items():            for j in range(v):                l.append(k)        return l
查看完整描述

1 回答

?
慕桂英3389331

TA贡献2036条经验 获得超8个赞

如果 Leetcode 运行 Python 3.5 或更早版本,那么字典实现是无序的。请参阅为什么字典和集合中的顺序是任意的?

这里不需要字典,反正你可以完全去掉字典:

class Solution(object):

    def decompressRLElist(self, nums):

        """

        :type nums: List[int]

        :rtype: List[int]

        """

        l = []

        for i in range(0, len(nums), 2):

            k = nums[i+1]

            v = nums[i]

            for j in range(v):

                l.append(k)

        return l

实际上,您的字典解决方案是不正确的,因为相同的值可能会多次出现在 LRE 中,长度不同;这是一个简单的例子,可以证明这个问题:


[

    3, 42,

    2, 17,

    4, 42

]

这应该扩展为:


[

    42, 42, 42,

    17, 17,

    42, 42, 42, 42

]

但是您的解决方案会输出不正确的结果,因为首先将输入放入字典d意味着您然后操作{42: 4, 17: 2},因此您输出


[

    42, 42, 42, 42,

    17, 17

]


查看完整回答
反对 回复 2022-11-09
  • 1 回答
  • 0 关注
  • 104 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
微信客服

购课补贴
联系客服咨询优惠详情

帮助反馈 APP下载

慕课网APP
您的移动学习伙伴

公众号

扫描二维码
关注慕课网微信公众号