ETH官方钱包

前往
大廳
主題

LeetCode - 1870. Minimum Speed to Arrive on Time 解題心得

Not In My Back Yard | 2021-07-18 00:00:01 | 巴幣 0 | 人氣 382

題目連結:


題目意譯:
你被給定一個浮點數數字 hour ,代表著你到達辦公室的時限。為了通勤到辦公室,你必須依序地搭 n 臺火車。你同樣地也被給定一個長度 n 的整數陣列 dist ,其中 dist[i] 代表著第 i 臺火車的乘車距離。

每臺火車只會於整數小時的時間點發車,所以你可能需要在兩次乘車之間等待。

例如,如果第 1 臺火車花費 1.5 小時,則你必須多等額外 0.5 小時才能在 2 小時整的時間點搭上第 2 班火車並發車。

回傳最小可能的正整數速度 speed (每小時公里數),其代表每臺火車必須行駛之速度使得你可以準時抵達辦公室;或是 -1 ,如果不可能準時抵達。

測試資料之產生滿足答案不過超過 10 ^ 7 且 hour 最多只會在小數點後有兩位數字。

限制:
n == dist.length
1 ≦ n ≦ 10 ^ 5
1 ≦ dist[i] ≦ 10 ^ 5
1 ≦ hour ≦ 10 ^ 9
最多只會有兩位數字位於 hour 的小數點後。



範例測資:
範例 1:
輸入: dist = [1,3,2], hour = 6
輸出: 1
解釋: 在速度 1 下:
- 第一臺火車耗時 1 ÷ 1 = 1 小時。
- 因為我們已經位於整數小時,我們便立即於 1 小時時間點發車。第二臺火車耗時 3 ÷ 1 = 3 小時。
- 因為我們已經位於整數小時,我們便立即於 4 小時時間點發車。第三臺火車耗時 2 ÷ 1 = 2 小時。
- 你將恰好抵達於 6 小時之時間點。

範例 2:
輸入: dist = [1,3,2], hour = 2.7
輸出: 3
解釋: 在速度 3 下:
- 第一臺火車耗時 1 ÷ 3 = 0.33333 小時。
- 因為我們不位於整數小時上,所以我們等到 1 小時時間點發車。第二臺火車耗時 3 ÷ 3 = 1 小時。
- 因為我們已經位於整數小時,我們便立即於 2 小時時間點發車。第三臺火車耗時 2 ÷ 3 = 0.66667 小時。
- 你將抵達於 2.66667 小時之時間點。

範例 3:
輸入: dist = [1,3,2], hour = 1.9
輸出: -1
解釋: 不可能準時抵達,因為第三臺火車最早能發車的時間點為 2 小時整。


解題思維:
可以參見這題或是這題的想法——將「答案」(在本題就是 speed 之值)作為二分搜尋法(Binary Search)的對象。

對於每個上界 U (因為題目保證,所以一開始可以設為 10 ^ 7 + 1)、下界 L(一開始設為 1)之中間值 M = (U + L) ÷ 2 ,當作一個可能的 speed 。然後我們去試試看 M 值是否可行。如果可行,便將上界降低到變為 M ;反之,將下界提高到變為 M + 1。

重複以上步驟直到 L = U 為止(答案收斂)。此時的 L 值即為所求。不過當過程中不管套入什麼 M 值都不可行,則代表著不可能準時抵達,此時回傳 -1 。




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

作者相關創作

更多創作