python - 找到加到某个值的数字对?

标签 python python-3.x algorithm

我有一个 match 函数,它接受一个数字列表和一个目标数字,我想编写一个函数,在数组中找到两个数字相加到该目标。

这是我的方法:


>>> def match(values, target=3):
...     for i in values:
...             for j in values:
...                     if j != i:
...                             if i + j == target:
...                                     return print(f'{i} and {j}')
...                             return print('no matching pair')

这个解决方案是否有效?可以改进吗?

最佳答案

最好的方法将产生 O(NlogN) 的解决方案。

  1. 你对列表进行排序,这将花费你 O(NlogN)
  2. 列表排序后,您将获得两个索引,前者指向第一个元素,后者指向最新元素,您检查元素的总和是否与您的目标匹配。如果总和高于目标,则将上部索引向下移动,如果总和低于目标,则将下部索引向上移动。当上索引等于下索引时结束。该操作是线性的,可以在 O(N) 时间内完成。

总而言之,排序的复杂度为 O(NlogN),索引的复杂度为 O(N),整个解决方案的复杂度为 O(NlogN)。

关于python - 找到加到某个值的数字对?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/57742372/

相关文章:

python - 什么是类似于 PHP Apache 共享内存存储(如 apc_store/apc_fetch)的良好 Flask/Python/WSGI 模拟?

python - 最大小费计算器 - 天真的解决方案

python - MAP 的意外结果

c++ - 路径树到树结构

algorithm - 执行分层权限检查的算法是否存在?

python - 使用字典计算字符串中的第一个字母 - Python

python - 修改 pandas 数据框中的 datetimeindex 中的小时

python - 将同一个 pandas 数据帧的切片分割

python - 使用 Python 将文本中的 "\x"替换为 "0x"

algorithm - 按关键字在数据存储中搜索相关主题