我在hackerrank竞赛中尝试了一个有趣的问题,然后出现了这个问题。我为此使用了itertools,这是代码:
import itertools
l = []
for _ in range(int(input())):
l.append(int(input()))
max = l[0] * l[len(l)-1]
for a,b in itertools.combinations(l,2):
if max < (a*b):
max = (a*b)
print(max)
他们还有其他有效的方法吗?由于我无法访问某些测试用例超时错误(这是一次小竞赛)。
这是一个遵循@User_Targaryen逻辑的实现。heapq
返回列表中的2个最大和2个最小的数字,mul operator
返回这2对数字的乘积,并max
返回这2个乘积中的最大数。
>>> import heapq
>>> from operator import mul
>>> l = [2,40,600,3,-89,-899]
>>> max(mul(*heapq.nsmallest(2,l)),mul(*heapq.nlargest(2,l)))
80011
# -899*-89 = 80011
本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句