1095. Find in Mountain Array
https://leetcode.com/problems/find-in-mountain-array/
solution
class Solution:
    def findInMountainArray(self, target: int, mountain_arr: 'MountainArray') -> int:
        r = mountain_arr.length() - 1
        peak_index = self.get_peak(mountain_arr, 0, r)
        l_index = self.search_left(mountain_arr, 0, peak_index, target)
        if l_index != -1:
            return l_index
        r_index = self.search_right(mountain_arr, peak_index, r, target)
        return r_index
    def get_peak(self, mountain_arr, l, r):
        while l < r:
            mid = l + (r - l) // 2
            if mountain_arr.get(mid) < mountain_arr.get(mid+1):
                l = mid + 1
            else:
                r = mid
        return l
    def search_left(self, mountain_arr, l, r, target):
        while l <= r:
            mid = l + (r - l) // 2
            if mountain_arr.get(mid) == target:
                return mid
            elif mountain_arr.get(mid) < target:
                l = mid + 1
            else:
                r = mid - 1
        return -1
    def search_right(self, mountain_arr, l, r, target):
        while l <= r:
            mid = l + (r - l) // 2
            if mountain_arr.get(mid) == target:
                return mid
            elif mountain_arr.get(mid) < target:
                r = mid - 1
            else:
                l = mid + 1
        return -1时间复杂度:O(log(n)) 空间复杂度:O(1)
follow up
852. Peak Index in a Mountain Array
class Solution:
    def peakIndexInMountainArray(self, arr: List[int]) -> int:
        l = 0
        r = len(arr) - 1
        while l < r:
            mid = l + (r - l) // 2
            if arr[mid] < arr[mid+1]:
                l = mid + 1
            elif arr[mid] > arr[mid+1]:
                r = mid
        return l时间复杂度:O(log(n)) 空间复杂度:O(1)
Last updated