【问题标题】:Find the minimum element in a sorted and rotated array查找已排序和旋转数组中的最小元素
【发布时间】:2020-11-28 01:26:28
【问题描述】:

问题: 具有不同元素的排序数组 A[ ] 在某个未知点旋转,任务是找到其中的最小元素。

预期时间复杂度:O(Log n)
我的代码:

def binarySearch(arr, n): 
    s = 0
    e = n-1
    while e >= s: 
        mid = (s+e) // 2
        if e==s:
            return arr[e]
        if mid == s and arr[mid] < arr[mid+1]:
            return arr[mid]
        elif mid == e and arr[mid] < arr[mid-1]:
            return arr[mid]
        elif arr[mid] < arr[mid - 1] and arr[mid] < arr[mid+1]:
            return arr[mid]
        elif arr[mid] < arr[e]:
            e = mid - 1
        else:
            e = mid + 1

当我使用 Array = [10, 20, 30, 40, 50, 5, 7] 时,我得到答案 = 10,而它应该是 5。
错误可能是什么?
编辑:在回答之后,我还必须添加以下行来考虑剩下的一个案例

if e==s:
    return arr[e]

【问题讨论】:

    标签: python arrays python-3.x data-structures binary-search


    【解决方案1】:

    这是否只涉及正常的二分搜索?

    def binarySearch(arr, n): 
        s = 0
        e = n-1
        while e >= s: 
            mid = (s+e) // 2
            if e == s:
                return arr[e]
            elif mid == s and arr[mid] < arr[mid+1]:
                return arr[mid]
            elif mid == e and arr[mid] < arr[mid-1]:
                return arr[mid]
            elif arr[mid] < arr[mid - 1] and arr[mid] < arr[mid+1]:
                return arr[mid]
            elif arr[mid] < arr[e]:
                e = mid - 1
            else:
                s = mid + 1
    

    我认为你的最后一行应该是s = mid + 1 而不是e = mid + 1

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2021-01-29
      • 2019-03-31
      • 1970-01-01
      • 2013-12-15
      • 2021-04-14
      相关资源
      最近更新 更多