おはようございます
今日の学びは
・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 減らしただけで順位が急激に上がった
細部にこだわると以外に得点伸びる
以上です