Python 3.x O(n)澄清中的Python对和问题
给定一个整数数组,输出总和为特定值k的所有唯一对 这是标准溶液,在O(n)时间内:Python 3.x O(n)澄清中的Python对和问题,python-3.x,list,set,Python 3.x,List,Set,给定一个整数数组,输出总和为特定值k的所有唯一对 这是标准溶液,在O(n)时间内: 如果len(arr)
如果len(arr)<2:
返回
seen=set()
输出=设置()
对于arr中的num:
目标=k-num
如果未看到目标:
seen.add(num)
其他:
添加((最小值(num,目标值),最大值(num,目标值)))
返回打印('\n'.join(映射(str,列表(输出)))
关于此解决方案,我有几个问题:
1) 为什么我们要使用集合来存储数组的可见值?为什么不列一份清单呢?这会改变什么吗
2) 为什么是最小值(num,target),最大值(num,target)?这是为了保持格式一致,还是有更深层次的原因?起初,我认为应该处理重复的情况,如(1,3)和(3,1),但这个解决方案没有遇到我不认为的情况?1)Set是python中检查值是否存在的更快的方法,而不是存储在这种情况下不需要的重复项2) 执行
(min(num,target),max(num,target))
的原因可能是向输出集添加一个元组,该元组包含两个数字,其顺序为(min,max),它将以更好的格式在最后一个print语句中打印 请参阅关于为什么使用集合而不是列表的说明。当检查它们是否已经包含值时,它们的效率更高。
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))))