【发布时间】:2021-03-22 05:00:56
【问题描述】:
我试图写一个二分查找程序来找到满足的最大x
x**2+(n-x-small)-(x-small)*(x-small-1)/2 <= maxSum
因为我不知道如何直接求解方程。只有 x 是未知数。 lst 包含一系列可能的整数值
下面的代码不知何故没有给出任何返回值,尽管它可以在每个条件下打印。我被以下代码困了几个小时,不知道出了什么问题。
def binarySearch(self, lst, n, small, maxSum):
m=len(lst)
if m==1:
x=lst[0]
a=x**2+(n-x-small)-(x-small)*(x-small-1)/2
if a<=maxSum:
return x
else:
return x-1
else:
j=m//2
x=lst[j]
a=x**2+(n-x-small)-(x-small)*(x-small-1)/2
if a==maxSum:
return x
elif a > maxSum:
self.binarySearch(lst[:j], n, small, maxSum)
elif a < maxSum:
self.binarySearch(lst[j:], n, small, maxSum)
【问题讨论】:
-
你怎么称呼这个?我不相信二分搜索是解决这个问题的合适工具——你确定每次比较的结果是可排序的吗?示例输入以及
small、n和lst的可能值的假设列表将很有帮助。此外,如果您在列表中使用切片,则几乎没有二进制搜索的意义。一旦你对列表进行切片,你的复杂性就是线性的,此时你不妨编写一个线性算法并跳过假装你有一个对数解。
标签: python algorithm return-value binary-search