おはようございます
今日の学びは
・whileの中の処理はできるだけ削れれば上位に食い込めるぞ
・状態管理問題も出ますよ。電話面接とかにぴったりな難易度つまり簡単なので使われそう。
です。
上げ下げの状態をうまく管理できるか?という問題です。
愚直に実装しておっけなー問題でした。ループのrange(len(A)-1)などはoff by 1 エラーに気をつけながら頑張りましょう。
class Solution:
    def validMountainArray(self, A: List[int]) -> bool:
        status = -1
        if len(A) <= 2: return False
        for i in range(len(A)-1):
            diff = A[i+1] - A[i]
            if diff > 0 and status == -1:
                status = 0
            if diff > 0 and status == 0:
                pass
            elif diff < 0 and status == 0:
                status = 1
                # i is peak
            elif diff < 0 and status == 1:
                # going down
                pass
            else:
                return False
        return status == 1
で

条件を統合してif文を二つ減らしたところ。。。
class Solution:
    def validMountainArray(self, A: List[int]) -> bool:
        status = -1
        if len(A) <= 2: return False
        for i in range(len(A)-1):
            diff = A[i+1] - A[i]
            if diff > 0 and status <= 0:
                status = 0
            elif diff < 0 and status >= 0:
                status = 1
            else:
                return False
        return status == 1

8m 減らしただけで順位が急激に上がった
細部にこだわると以外に得点伸びる
以上です