这个看似随机的字符串是如何解决 TwoSum 问题的?

问题描述 投票:0回答:1

来自LeetCode,“二和问题”的定义是:

给定一个整数数组 nums 和一个整数目标,返回索引 两个数字的总和达到目标。

您可以假设每个输入都有一个解决方案,并且 您不能两次使用相同的元素。

您可以按任何顺序返回答案。

示例1:

nums = [2,7,11,15]

目标 = 9

输出:[0,1]

目前LeetCode上Python运行速度最快的解决方案如下:

class Solution(object):
    def twoSum(self, nums, target):
        from zlib import decompress
        from base64 import b64decode
        open('user.out', 'wb').write(decompress(b64decode("eJyLNtRRMIjlijbSUTAEUggekqAxiqCJjoIRhgZjFEGESgMMJVDtphDKGK7SGKFy2FKwAAFyTRGilkCgowAkLIAcMx0IaQmSN9IxAqsz0zE0B9IGOsDABQCpFVmV"))),exit(0)

从我的角度来看,我不知道这段代码是如何生成的。他们似乎利用了解释器中的漏洞,但即便如此也不清楚。

该脚本到底如何运行以及如何执行问题描述中提到的上述操作?

python algorithm data-structures sum
1个回答
0
投票

Base64 允许将二进制数据编码为文本,然后将其解压缩

from zlib import decompress
from base64 import b64decode
print(decompress(b64decode("eJyLNtRRMIjlijbSUTAEUggekqAxiqCJjoIRhgZjFEGESgMMJVDtphDKGK7SGKFy2FKwAAFyTRGilkCgowAkLIAcMx0IaQmSN9IxAqsz0zE0B9IGOsDABQCpFVmV")))

提供输出

b'[1, 0]\n[2, 1]\n[1, 0]\n[2, 0]\n[2, 1]\n[3, 0]\n[2, 0]\n[4, 2]\n[2, 1]\n[1, 0]\n[3, 2]\n[2, 1]\n[2, 0]\n[4, 0]\n[1, 0]\n[3, 2]\n[4, 2]\n[5, 2]\n[3, 0]\n[4, 3]\n[1, 0]\n[1, 0]\n[1, 0]\n[1, 0]\n[1, 0]\n[1, 0]\n[1, 0]\n[1, 0]\n[1, 0]\n[1, 0]\n[1, 0]\n[1, 0]\n[1, 0]\n[1, 0]\n[1, 0]\n[1, 0]\n[1, 0]\n[1, 0]\n[1, 0]\n[1, 0]\n[1, 0]\n[1, 0]\n[1, 0]\n[1, 0]\n[1, 0]\n[1, 0]\n[1, 0]\n[1, 0]\n[1, 0]\n[1, 0]\n[1, 0]\n[1, 0]\n[4, 0]\n[11, 5]\n[1, 0]\n[9999, 9998]\n[6,8]\n[6,9]\n[12,25]\n[16,17]\n[0,1]\n'

所以作者只是存储了预期的输出,然后将其写入

user.out
,我认为然后由法官进行测试。

© www.soinside.com 2019 - 2024. All rights reserved.