You need to enable JavaScript to run this app. 如何降低Python中这段4位数字比对compare函数的时间复杂度?
优惠活动
大模型
产品
解决方案
定价
更多

如何降低Python中这段4位数字比对compare函数的时间复杂度?

compare函数优化解答

核心结论

你当前的实现时间复杂度已经达到最优水平,没有进一步降低的空间。
原因非常简单:你的输入是固定长度的4位数字,所有遍历、查询操作的执行次数都是固定常数,本身就是O(1)的常数时间复杂度,不存在更低的复杂度等级。
如果拓展到任意k位无重复数字的通用比对场景,你的现有实现时间复杂度为O(k),这也是该问题的理论最优值——要完成比对你至少需要遍历两个数字的每一位各一次,不可能得到比线性时间更低的复杂度。

可选效率/可读性优化方案

你原来的实现逻辑是完全正确的,如果想要简化代码、提升实际运行速度,可以参考如下思路:
所有相同数字要么位置匹配(计入x)要么位置不匹配(计入y),因此只需先算出两个数字的公共数字总数,减去位置匹配的x,即可直接得到y,不需要额外存储位置字典。
优化后代码:

def compare(n1, n2):
    s1, s2 = str(n1), str(n2)
    # 统计两个数的公共数字总数
    common_count = len(set(s1) & set(s2))
    # 统计位置相同的位数x
    x = sum(a == b for a, b in zip(s1, s2))
    # 剩余公共数字就是位置不同的y
    y = common_count - x
    return x, y

这个实现的优势:

  • 逻辑更简洁易读,不需要手动维护字典存储位置映射
  • 用到的集合操作、生成器表达式都是Python底层C实现的,实际运行速度比手写Python循环的版本更快
  • 天然支持任意长度的无重复数字比对,不需要修改代码逻辑

内容的提问来源于stack exchange,提问作者Jover Tay

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.10.19 09:15:04