852.山脈配列のピークインデックス(Python)

1497 ワード

タイトル
難易度:★☆☆☆タイプ:配列
次の属性に合致する配列Aを山脈と呼びます.
A.length>=3 0 A[i+1] > ... > A[A.length-1]は、山脈として決定された配列を与え、A[0] A[i+1] > ... > A[A.length−1]のiの値.
ヒント3<=A.length<=10000 0<=A[i]<=10^6 Aは上記のように定義された山脈である

例1入力:[0,1,0]出力:1
例2入力:[0,2,1,0]出力:1
タイトル
私たちは二分法を用いてこの問題を解決した.
初期化考察の線分の左右端点:left=0,right=len(A)-1;
中点座標:mid=left+(right-left)/2、中点左右隣接位置の座標midl=mid-1、midr=mid+1;
中央の3つの要素でトレンド、山の斜面と山頂の違いを確認します.
山頂:中間位置元素は隣接する左右元素より大きく、A[mid]>A[midl],A[mid]>A[midr];
山の斜面:中間とその隣接する左右の要素は単調に増加または減少し、A[midl]A[mid]>A[midr](右斜面)
左山の斜面について、山頂は右半分にあり、私たちは左半分を取り除き、右半分を考察した.
右山の斜面については,山頂は左半分にあり,右半分を取り除き,左半分を考察した.
class Solution:
    def peakIndexInMountainArray(self, A):
        """
        :param A: List[int]
        :return: int
        """
        left, right = 0, len(A)-1
        while True:
            mid = left + (right - left) // 2
            midl, midr = mid-1, mid+1
            if A[mid] > A[midl] and A[mid] > A[midr]:
                return mid
            elif A[midl] < A[mid] < A[midr]:            #     
                left = mid + 1
            elif A[midl] > A[mid] > A[midr]:            #     
                right = mid - 1

質問やアドバイスがあれば、コメントエリアへようこそ~