簡體   English   中英

確定一個數字是否在區間數組中

[英]Determine whether a number is in array of intervals

我想對間隔數組中的元素執行二進制搜索。 例如,我需要在intervals = [[1,10], [11, 18], [21, 24], [25, 32], [33, 40], [42, 43]] 此外,如果在任何間隔中都找不到該數字,則算法需要返回 -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)

提前致謝。

您需要修改二分查找,而不是檢查元素是否等於 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)
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))

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM