来自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)
从我的角度来看,我不知道这段代码是如何生成的。他们似乎利用了解释器中的漏洞,但即便如此也不清楚。
该脚本到底如何运行以及如何执行问题描述中提到的上述操作?
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
,我认为然后由法官进行测试。