LeetCode最快Python版TwoSum解法原理探究:神秘字符串如何生效?
解析LeetCode TwoSum问题的“最快Python解法”
问题回顾
LeetCode的TwoSum问题定义:
给定整数数组nums和整数target,返回两个数的下标,使得它们的和等于target。
你可以假设每个输入恰好有一个解,且不能使用同一个元素两次。返回答案的顺序不限。
示例:
- 输入:
nums = [2,7,11,15],target = 9 - 输出:
[0,1]
所谓的“最快解法”代码
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)
代码运行逻辑
- 导入依赖:先导入
zlib.decompress(解压压缩数据)和base64.b64decode(解码Base64字符串)两个工具函数。 - 解码解压字符串:对给定的Base64字符串解码,得到zlib压缩后的字节数据,再解压出原始内容。
- 写入文件并强制退出:将解压后的内容写入
user.out文件,随后立即调用exit(0)终止程序,完全跳过了正常的函数返回流程。
解压后的真实内容
手动解码并解压这段Base64字符串后,得到的是一段Python解题代码:
print([i for i, n in enumerate(nums) if target - n in nums and nums.index(target - n) != i][0], nums.index(target - nums[[i for i, n in enumerate(nums) if target - n in nums and nums.index(target - n) != i][0]]))
它如何完成TwoSum任务?
这段代码是典型的投机取巧写法:
- 它没有遵循LeetCode要求的“函数返回结果”规范,而是通过写入
user.out文件提交答案,利用了部分判题环境会读取该文件内容作为输出的特性。 - 解压后的代码是一个基础的TwoSum解法:遍历数组找到第一个满足
target - n存在于数组且下标不同的元素,再找到配对元素的下标,最后打印这两个下标。 - 它被标记为“最快”的原因是程序写入文件后立即退出,跳过了LeetCode的函数调用栈处理,在判题系统的计时中显得耗时极短,但真实解题逻辑的效率并不高。
本质:并非漏洞,是钻判题机制的空子
这段代码没有利用解释器漏洞,只是利用了判题环境的特定实现——将user.out内容视为输出。它通过压缩真实解题代码嵌入到字符串中,运行时解压写入文件并强制退出,在计时上钻了空子,写法极不规范,也不具备通用性。
内容的提问来源于stack exchange,提问作者Amar Srivastava
相关产品推荐
相关产品推荐

