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