【问题标题】:left binary search in pythonpython中的左二分查找
【发布时间】:2014-04-10 02:49:19
【问题描述】:

例如,如果输入是 [1,2,3,3,4,4,5] 并且我搜索 3,它应该返回 2,因为索引 2 是 最左边出现的 3。

在[1,1,1,1,1,1,1,1]中,我搜索1,你应该返回0。

我们如何编写函数以在二分搜索中回溯?

【问题讨论】:

  • 欢迎来到 StackOverflow。请阅读stackoverflow.com/help/how-to-ask 了解如何最好地提出问题。
  • 你应该使用list.index函数。这就是它默认的工作方式。
  • @user2357112 为什么不list.index?!?
  • @thefourtheye:考虑到“二分搜索”出现在标题和问题正文中,并且两个示例输入都已排序,我很确定他想要二分搜索。

标签: python search binary


【解决方案1】:

您可以使用此代码在左二分查找中查找最左边的元素

def left_binary_search(input, value):
    try:
        if (type(input).__name__ != 'list') or (type(value).__name__ != 'int'):
            raise TypeError

    low = 0
    high = len(input) - 1
    check = (low + high) // 2
    q = False
    l1 = []
    while low <= high:
        mid = (low + high) // 2
        if input[mid] > value:
            high = mid - 1
        elif input[mid] < value:
            low = mid + 1
        else:
            if mid > check:
                return -1
            else:
                q = True
                l1.append(mid)
                high = mid
                if low == high:
                    return min(l1)
    if q == False:
        return -1
    return min(l1)
except TypeError:
    print("invalid type")

【讨论】:

    【解决方案2】:

    此函数返回元素最左边的索引,如果未找到该元素,则返回 -1。

    def left_binary_search(arr, value):
        low = 0
        high = len(arr) - 1
        index = -1
    
        while (low <= high):
    
            mid = (low + high) // 2
    
            if arr[mid] == value:
                index = mid
                high = mid - 1
            elif arr[mid] < value:
                low = mid + 1
            else:
                high = mid - 1
    
        return index
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2021-03-22
      • 2015-12-02
      • 1970-01-01
      • 2017-08-02
      • 2012-10-05
      相关资源
      最近更新 更多