Leetcode Python提交占用了过多的内存@ 13MB

时间:2019-05-13 18:23:31

标签: python

这个问题是posed by another user,但是他没有提供任何文档。在这个问题中,我提供了该文档。

让我们直接跳到一个示例,该示例显示Leetcode Python3内存消耗所显示的矛盾数据以及4Sum问题。

我自己的解决方案消耗了13 MB的内存(正如我所有的Python解决方案一样!)。但是也许我的代码编写得很差,所以让我们将我的代码与其他解决方案进行比较...

使用用于该问题的统计信息页面,我发现性能最佳的解决方案(wrt内存)出现在12,220 kb

best memory @ 12,220 kb

此代码的源可通过api here(登录后)获得;它也粘贴到该问题的末尾。

现在,让我们复制/粘贴此解决方案以确认它是否在指定的12,220 kb中出现。

如下图所示,陈述 12,220 kb解决方案(“几秒钟前”)消耗的内存量与我的代码(“两天前”)相同,高达13.2 MB:

13MB memory consumption

问题是,为什么即使使用Leetcode亲自引用的代码消耗了12,220 千字节千字节,所有的Python提交都始终消耗约13MB的内存?

edit:(Leetcode使用缩写kb(千字节),但我相信它们的实际含义是kB(千字节),因为它们引用了我的13 MB提交内容,范围约为13,000 kb。尽管命名格式不正确,但仍无法解释为什么以13.2 MB的速度提供了12,220千字节的解决方案。

为完整起见,以下是假定的12,220 kb解决方案的代码:

class Solution:
    def fourSum(self, nums: 'List[int]', target: 'int') -> 'List[List[int]]':
        if len(nums) < 4:
            return []

        nums = sorted(nums)

        solution_sets = []

        for p1 in range(len(nums) - 3):
            if nums[p1] * 4 > target or nums[-1] * 4 < target:
                continue

            if p1 > 0 and nums[p1] == nums[p1-1]:
                continue

            for p2 in range(p1 + 1, len(nums) - 2):
                if p2 > p1 + 1 and nums[p2] == nums[p2-1]:
                    continue

                l = p2 + 1
                r = len(nums) - 1
                while l < r:
                    curr_sum = nums[p1] + nums[p2] + nums[l] + nums[r]

                    if curr_sum > target:
                        while l < r and curr_sum > target:
                            r -= 1
                            curr_sum = nums[p1] + nums[p2] + nums[l] + nums[r]
                    elif curr_sum < target:
                        while l < r and curr_sum < target:
                            l += 1
                            curr_sum = nums[p1] + nums[p2] + nums[l] + nums[r]
                    else:
                        solution_set = (nums[p1], nums[p2], nums[l], nums[r])
                        solution_sets.append(solution_set)
                        l += 1
                        while l < r and nums[l-1] == nums[l]:
                            l += 1
                        r -= 1
                        while l < r and nums[r+1] == nums[r]:
                            r -= 1

        return solution_sets

0 个答案:

没有答案