Python FloorOfX使用二进制搜索

时间:2017-03-09 11:59:42

标签: python search binary floor

如何使用二进制搜索编写代码:

def floorofx(L, x):
    pass

喜欢为每个元素定义低,高,中。如,

Input: L = [11, 12, 13, 14, 15, 20, 27, 28], x = 17
Output: 15

15是L中最小的元素,小于17。

Input: L = [11, 12, 13, 14, 15, 16, 19], x = 20
Output: 19

19是L中小于20的最大元素。

Input: L = [1, 2, 8, 10, 10, 12, 19], x = 0
Output: -1

由于楼层不存在,输出为-1。

有人可以帮我吗?

1 个答案:

答案 0 :(得分:0)

您可以简单地使用bisect模块并减少获得的索引。

from bisect import bisect_right

def floorofx(L, x):
    idx = bisect_right(L,x)
    return L[idx-1] if idx > 0 else -1

这会产生以下结果(对于您的给定样本输入):

>>> floorofx(L = [11, 12, 13, 14, 15, 20, 27, 28], x = 17)
15
>>> floorofx(L = [11, 12, 13, 14, 15, 16, 19], x = 20)
19
>>> floorofx(L = [1, 2, 8, 10, 10, 12, 19], x = 0)
-1

请注意 L必须排序,如果 -1L 的元素,则无法制作区分“未找到”和-1作为结果。由于我们使用二进制搜索,因此算法在 O(log n)中运行。