6月 03, 2024

Leetcode Weekly Contest 400 - 3168. Minimum Number of Chairs in a Waiting Room

很久沒起床打 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 而已很簡單就能通過

沒有留言:

張貼留言