前往
大廳
主題

LeetCode - 2274. Maximum Consecutive Floors Without Special Floors 解題心得

Not In My Back Yard | 2023-03-28 12:00:10 | 巴幣 1000 | 人氣 117

題目連結:


題目意譯:
Alice 正管理著一間公司並已租下了某一棟建築物的若干樓層作為辦公空間。Alice 決定有些樓層應作為特殊樓層,用作放鬆用途。

你被給定兩整數 bottom 和 top,其代表著 Alice 已經租下了從 bottom(含)到 top(含)的樓層。你同時也被給定一整數陣列 special,其中 special[i] 代表著 Alice 決定作為放鬆用的特殊樓層號。

回傳沒有特殊樓層的最大連續樓層數。

限制:
1 ≦ special.length ≦ 10 ^ 5
1 ≦ bottom ≦ special[i] ≦ top ≦ 10 ^ 9
special 中所有數值皆彼此相異。



範例測資:
範例 1:
輸入: bottom = 2, top = 9, special = [4,6]
輸出: 3
解釋: 以下為沒有特殊樓層的連續樓層之區間(閉區間):
- (2, 3) 總計有著 2 樓。
- (5, 5) 總計有著 1 樓。
- (7, 9) 總計有著 3 樓。
因此,我們回傳當中最大者,即為 3 層樓。

範例 2:
輸入: bottom = 6, top = 8, special = [7,6,8]
輸出: 0
解釋: 每一樓都被租來當作特殊樓層,所以我們回傳 0。


解題思維:
(令 n = special.length)
將特殊樓層由小排到大,因此現在 special[0] 為最小值、special[n - 1] 為最大值。

因此現在所有非特殊樓層都位於在 bottom ~ special[0] 、 special[i - 1] ~ special[i] 或是 special[n - 1] ~ top 之間(其中 0 < i < n)。

所以我們掃過一次 special 算出所有 special[i] - special[i - 1] - 1 之值,與 special[0] - bottom 和 top - special[n - 1] 取最大值之後即為所求。




此次分享到此為止,如有任何更加簡潔的想法或是有說明不清楚之地方,也煩請各位大大撥冗討論。

創作回應

更多創作