【发布时间】:2018-10-24 08:59:57
【问题描述】:
我有一个非常大的数字(20 位数),我需要找到它。所以在 0 到 999999999999999999999 之间的范围内。
我可以检查这个数字是大于还是小于猜测的数字,例如:
is_smaller(12341234123412341234)
# True
is_smaller(98769876987698769876)
# False
不过,is_smaller 函数的工作原理未知,但数字的值是恒定的。
这可以通过二分搜索解决吗?我不太确定如何实现这一点,因为我只知道数字是否更小/更大。 二进制搜索I've come across 的大多数实现都使用它在数组中查找给定的数字,这对我来说不起作用,因为该数字是未知的。
在这种情况下如何使用二分搜索,或者其他方法更适合?
目标是找到可能的最高值,该值仍为 is_smaller 返回 True。
编辑:我无法判断数字是否更大,所以我没有is_bigger 函数。所以在较小的范围内(例如 0 到 10),如果感兴趣的数量是 6,我的函数将返回:
[...]
is_smaller(4)
# True
is_smaller(5)
# True
is_smaller(6)
# True
is_smaller(7)
# False
is_smaller(8)
# False
我不得不承认问题中的函数名称选择得非常糟糕。
【问题讨论】:
标签: python numbers binary-search-tree binary-search