任务:编写一个函数binary_search,它具有O(log n)时间复杂度,以找到插入元素的位置,使得:
binary_search(42, (-5, 1, 3, 5, 7, 10))
给出6。
请帮我解决这个问题。我该怎么办呢?
答案 0 :(得分:1)
以下内容可能会有所帮助: 该解决方案具有O(log(n))运行时。类似于二进制搜索 Binary Search Wiki
equals
答案 1 :(得分:0)
这是二元搜索的变体问题,它与查找序列中小于k(要插入的元素)或大于k的最小元素的最大元素相同。
def binary_search_insert(target, seq):
U = len(seq) - 1
L = 0
result = 0
if target <= seq[0]:
result = 0
elif target >= seq[len(seq) - 1]:
result = len(seq)
else:
while L <= U:
M = (L + U)/2
if seq[M] <= target:
L = M + 1
else:
result = M
U = M -1
return result
#test case
In [34]: seq
Out[34]: [1, 2, 3, 4]
In [35]: k = 2
In [36]: binary_search_insert(k, seq)
Out[36]: 2
In [37]: k = 2.5
In [38]: binary_search_insert(k, seq)
Out[38]: 2
In [39]: k = 3.5
In [40]: binary_search_insert(k, seq)
Out[40]: 3