853. Car Fleet
題目網址: https://leetcode.cn/problems/car-fleet/
題意: 在一條單行道上, 有
n輛車開往同一目的地, 目的地是幾英里外的target。給兩個整數 array
position、speed, 其中position[i]是第i輛車的位置,speed[i]是第i輛車的時速(英里/小時)。一輛車永遠不會超過前面的另一輛車, 但它可以追上去, 並與前車以相同的速度緊接著行駛。此時, 我們可忽略這兩輛車之間的距離, 也就是說, 它們被假定處於相同的位置。
車隊是一些由行駛在相同位置、具有相同速度的車組成的非空集合。注意, 一輛車也可以是一個車隊。
即便一輛車在目的地才趕上了一個車隊, 它們仍然會被視作是同一個車隊。
返回到達目的地的車隊數量。

Solution:
想法:利用 Monotonic(遞減) Stack, 先使用 map 根據
position[i]「由小到大」排序, 然後依序取出, 並計算position[i]到target所需的時間。如果當前所需的時間time ≥ stk.top(), 則代表兩車會合併為一個車隊, 因為離target較遠的那輛車所需的時間stk.top()較短, 但是道路為單向且不能超車。所以最後抵達target的時間會受制於time。所以一旦time ≥ stk.top()就要stk.pop(), 將兩輛車合併為一個車隊(受限於當前time的車隊), 直到stk.top() > time, 才能將timepush 到stk中。最後,stk中的元素個數即為車隊數量。
class Solution { |
- time:$O(n)$ ➔ for loop
- space:$O(n)$ ➔
stk中的元素個數不超過n
本部落格所有文章除特別聲明外,均採用 CC BY-NC-SA 4.0 許可協議。轉載請註明來自 Zako's Blog!
評論