使用二分搜索在 O(log n ) 中从给定数组中查找峰值元素索引

问题描述 投票:0回答:1

任何人都可以帮助我理解下面使用二分搜索的代码,因为给定的数组没有排序,那么我们如何找出实际的峰值元素索引?

通常它只适用于排序数组,对吗?

对于此测试用例 -

输入:arr = [0,10,5,2]

输出:1

class Solution:
    def peakIndexInMountainArray(self, arr: List[int]) -> int:
        l = 0
        h = len(arr) - 1
        while l < h:
            mid = l + (h - l) // 2
            if arr[mid] > arr[mid + 1]:
                h = mid 
            else:
                l = mid + 1
        return l
python coding-style
1个回答
0
投票

此代码使用二分搜索,它分为

arr[1]
arr[2]
。在循环中,mid 是 10,因为它大于 5
arr[mid] > arr[mid + 1]
h=1,即 10 的索引。它再次执行循环并检查 0 和 10 之间,并返回索引 10。

© www.soinside.com 2019 - 2024. All rights reserved.