Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/326.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 确定数字是否在间隔数组中_Python_Binary Search - Fatal编程技术网

Python 确定数字是否在间隔数组中

Python 确定数字是否在间隔数组中,python,binary-search,Python,Binary Search,我想对间隔数组中的元素执行二进制搜索。例如,我需要在interval=[[1,10]、[11,18]、[21,24]、[25,32]、[33,40]、[42,43]]中找到包含35个的区间索引。此外,如果在任何间隔中都找不到该数字,则算法需要返回-1。在python3上可能吗?如何修改我的标准二进制搜索函数,使其返回我需要的内容?下面是我的二进制搜索函数的外观: def b_search(array, element, start, end): if start > end:

我想对间隔数组中的元素执行二进制搜索。例如,我需要在
interval=[[1,10]、[11,18]、[21,24]、[25,32]、[33,40]、[42,43]]中找到包含35个的区间索引。此外,如果在任何间隔中都找不到该数字,则算法需要返回-1。在python3上可能吗?如何修改我的标准二进制搜索函数,使其返回我需要的内容?下面是我的二进制搜索函数的外观:

def b_search(array, element, start, end):
    if start > end:
        return -1
    mid = (start + end) // 2
    if element == array[mid]:
        return mid
    if element < array[mid]:
        return b_search(array, element, start, mid-1)
    else:
        return b_search(array, element, mid+1, end)
def b_搜索(数组、元素、开始、结束):
如果开始>结束:
返回-1
mid=(开始+结束)//2
如果元素==数组[mid]:
中途返回
如果元素<数组[mid]:
返回b_搜索(数组、元素、开始、中间1)
其他:
返回b_搜索(数组、元素、中间+1、结束)

提前感谢。

您需要修改二进制搜索,以便不检查元素是否等于mid,而是检查元素是否在mid间隔内:

def b_search(array, element, start, end):
    if start > end:
        return -1
    mid = (start + end) // 2
    if array[mid][0] <= element <= array[mid][1]:
        return mid
    if element < array[mid][0]:
        return b_search(array, element, start, mid-1)
    return b_search(array, element, mid+1, end)
def b_搜索(数组、元素、开始、结束):
如果开始>结束:
返回-1
mid=(开始+结束)//2
如果数组[mid][0]
间隔=[[1,10]、[11,18]、[21,24]、[25,32]、[33,40]、[42,43]]
数字=50
idx_list=[i代表i,如果间隔为[0],则枚举中的间隔(间隔)
intervals = [[1,10], [11, 18], [21, 24], [25, 32], [33, 40], [42, 43]]
number = 50
idx_list = [i for i,interval in enumerate(intervals) if interval[0] <= number <= interval[1]]
idx = -1  if not idx_list else idx_list[0]
print(idx)
def b_search_2d(arr_2d, element, start=0, end=0):
    if end == 0:
        end = len(arr_2d) - 1
    if start > end:
        return -1
    mid = (start + end) // 2
    if arr_2d[mid][0] <= element <= arr_2d[mid][1]:
        return mid
    elif element < arr_2d[mid][0]:
        return b_search_2d(arr_2d, element, start, mid-1)
    else:
        return b_search_2d(arr_2d, element, mid+1, end)       
intervals = [[1,10], [11, 18], [21, 24], [25, 32], [33, 40], [42, 43]]
print(b_search_2d(intervals, 35))
print(b_search_2d(intervals, 50))