python-3.x - O(n) 澄清中的 Python 对求和问题
问题描述
给定一个整数数组,输出总和为特定值 k 的所有唯一对。
这是标准解决方案,在 O(n) 时间内:
if len(arr) < 2:
return
seen = set()
output = set()
for num in arr:
target = k - num
if target not in seen:
seen.add(num)
else:
output.add((min(num, target), max(num, target)))
return print('\n'.join(map(str, list(output))))
关于这个解决方案,我有几个问题:
1)为什么我们使用一个集合来存储数组的可见值?为什么不是清单?这有什么改变吗?
2) 为什么是 min(num, target), max(num, target)?这是为了格式一致还是背后有更深层次的原因?一开始我以为是处理(1,3)&(3,1)这样的重复案例,但是这个解决方案并没有遇到我不认为的情况?
解决方案
1) Set 是python中检查值是否存在而不存储在这种情况下不需要的重复项的更快方法。
2) 这样做的原因(min(num, target), max(num, target))
可能是向输出集添加一个元组,该元组包含 (min, max) 顺序中的两个数字,它将在最后一个打印语句中以更好的格式打印。
推荐阅读
- python - 将 python 程序设置为 SCHED_RR 或 SCHED_FIFO
- python - 为什么“合并”后显示的数据与 pandas 和 jupyter notebook 中的实际数据框不同?
- git - 如何删除提交给 HEAD 的新文件
- javascript - 如何使用 JavaScript 和 Flask_socketio 将消息广播到特定 URL?
- stata - 如何在本地宏中存储带撇号的字符串
- c++ - 模板类可以有纯虚函数和虚运算符吗?
- docker - 在 CentOS 7 上将 Docker 从 19.03.2 降级到 18.09.9
- gradle - 如何从 Gradle 的子目录中复制?
- java - 无法为 org.gradle.api.Project 类型的根项目“[redacted]”获取未知属性“artifactory_contextUrl”
- java - 如何使用 docker compose 中的点设置属性名称?