2023-10-17|閱讀時間 ‧ 約 22 分鐘

682. Baseball Game (棒球比賽)


英文版點我中文版點我


↑看個小廣告,支持好內容↑


"C": 將前一局分數作廢
"D": 將前一局分數乘以雙倍
"+": 將前兩局分數相加


這三條規則有什麼共通點?它們都是從計分板的末端去取資料,我們至少得知道末兩項是什麼,分數才能往下更新:

// Case1: [3,1,D,+]
策略:先加上這局的分數,再去更新末兩項

3: sum=0+3=3, prev2=X, prev1=3
1: sum=3+1=4, prev2=3, prev1=1
D: sum=4+2=6, prev2=1, prev1=2 (D:前一局兩倍)
+: sum=6+3=9, prev2=2, prev1=3 (+:前兩局加總)


乍看之下可行,但萬一出現了 C 呢?末兩項也得跟著還原,可是變數已經更新,再往前的資料已無法溯回 ...


Stack

計分板的寫入和移除都是發生在資料的末端,是時候讓 Stack 登場了!

後進者先出 (LIFO, Last-In-First-Out) 是 Stack 的特徵

Stack 可以透過陣列的 push()pop() 來實現,照著規則建立計分板陣列,最後再將各局分數加總就可以了,再幫你複習一次迭代 XD

// acc:累積值、curr:陣列項
return arr.reduce((acc, curr)=>acc+curr, 0);



  • 本題分類標籤:ArrayStackSimulation
  • 本題正解率=75.2%

❤️ 若內容對你實用,歡迎追蹤本專題,或小額贊助支持~
⭐ 這是我的第 9 篇刷題筆記,完整解題索引看這裡 → Here

分享至
成為作者繼續創作的動力吧!
© 2024 vocus All rights reserved.