很久沒起床打 LeetCode weekly 了,這次難得起床玩一下,有點幸運的是幾乎都不是在考邏輯演算類的,基本上就是只要努力達成條件通關就好。不過這次很可惜的是第三題壓線過,但送出時剛好超過時間所以不算成功
這次分別是
3168. Minimum Number of Chairs in a Waiting Room
3169. Count Days Without Meetings
3170. Lexicographically Minimum String After Removing Stars
競賽連結在 Weekly Contest 400
至於原始答題的 Code 放在 Github 就不再丟了,而且題目沒有解到 Hard 所以我也大略說我在當下的題目理解跟想法就好,以下僅代表解題成功的結果,不代表最佳解或者絕對正確
3168.
題目需求是,當有一個字串包含 E (entry) 跟 L (leave) ,最少要總共多少個位置才能剛好滿足
當有一個 E 時,提供一個位置給他,若沒有 L 出現時再次出現一個 E ,就會需要兩個位置,而當 L 出現後,就會把原本的佔有空間讓出來(但大小不變)
而當下次還有一個 E 時,讓出的空間就可以直接被佔用而不用再多添加一張椅子
一看到這個題目我只想到用一個存放 0,1 的 Array 代表位置,如果有 E 就檢查有沒有空位置,沒空位置就新增一個,然後有空位置就占用,然後看最後這個 Array 長度是多少就是答案
-- 補充發文當下重讀題目後的新答案 --
因為解題時比較直觀的看題目說明,所以用的是第一個解法,但重新思考後得出另一個做法相對容易,速度也快了 3 倍多,但由於目前還沒有別人的討論跟解題方法,
let space = 0 let seat = 0 for(let i =0 ; i < s.length ; i++){ v = s[i] if(v=='E') { if(space > 0) { space-- } else { seat++ } } else { space++ } } return seat
第一題大概是這樣,Easy 而已很簡單就能通過
沒有留言:
張貼留言