【发布时间】:2014-10-10 22:33:12
【问题描述】:
所以问题是,你有一个整数列表,你必须找出列表中的任何两个总和是否为负数。
我现在有这个
def negsum(L):
if len(L) <= 2:
if L[0] + L[1] >= -1: #Here is my base case
return False
else:
return True
else:
if L[0] + L[1] <= -1:
return True
else:
return negsum(L[1:]) #Recursive portion
我的代码的问题是它只检查列表中的前 2 个。所以在一个列表中 [-10, 15, 30, -5] 当它应该为真时,你会得到 False,因为 -5 + -10 是负数。我的功能只检查:
-10 + 15
15 + 30
30 - 5
我怎样才能得到它,以便它使用递归检查 -10 + 30、-10 -5 和 15-5?
编辑,我忘了提,只允许使用 len() [] 和 : 运算符。没有循环。这甚至可以在没有循环的情况下实现吗?
【问题讨论】:
-
您不只是对它们进行排序并检查两个最小值之和是否为
<0吗? -
或者如果算法复杂性是最重要的,
return sum(heapq.nsmallest(2,L)) < 0