LeetCode 1776. 车队 II(单调栈)
生活随笔
收集整理的這篇文章主要介紹了
LeetCode 1776. 车队 II(单调栈)
小編覺得挺不錯的,現在分享給大家,幫大家做個參考.
文章目錄
- 1. 題目
- 2. 解題
1. 題目
在一條單車道上有 n 輛車,它們朝著同樣的方向行駛。
給你一個長度為 n 的數組 cars ,其中 cars[i] = [positioni, speedi] ,它表示:
- positioni 是第 i 輛車和道路起點之間的距離(單位:米)。
題目保證 positioni < positioni+1 。 - speedi 是第 i 輛車的初始速度(單位:米/秒)。
簡單起見,所有車子可以視為在數軸上移動的點。
當兩輛車占據同一個位置時,我們稱它們相遇了。
一旦兩輛車相遇,它們會合并成一個車隊,這個車隊里的車有著同樣的位置和相同的速度,速度為這個車隊里 最慢 一輛車的速度。
請你返回一個數組 answer ,其中 answer[i] 是第 i 輛車與下一輛車相遇的時間(單位:秒),如果這輛車不會與下一輛車相遇,則 answer[i] 為 -1 。
答案精度誤差需在 10-5 以內。
來源:力扣(LeetCode) 鏈接:https://leetcode-cn.com/problems/car-fleet-ii
著作權歸領扣網絡所有。商業轉載請聯系官方授權,非商業轉載請注明出處。
2. 解題
類似題目:LeetCode 853. 車隊(排序)
class Solution { public:vector<double> getCollisionTimes(vector<vector<int>>& cars) {int n = cars.size();vector<double> ans(n, -1.0);stack<int> s;for(int i = n-1; i >= 0; i--) {while(!s.empty() && (cars[s.top()][1] >= cars[i][1] || (ans[s.top()] > 0 && delta(cars, i, s.top()) > ans[s.top()]))){ // 我的速度沒有前車大,追不上前面的,檢查再前面的人,前面可能有更慢的//前車 top 能撞上別人 且 撞上別人的時間 小于 我撞上top的時間,那我應該去跟更前面的人計算// 因為前車 top 已經先于我 撞上更前面的s.pop();}if(!s.empty())ans[i] = delta(cars, i, s.top());s.push(i);}return ans;}double delta(vector<vector<int>>& cars, int i, int j)//j 位置遠,速度慢{return (cars[j][0] - cars[i][0])/double(cars[i][1] - cars[j][1]);} };572 ms 122.8 MB C++
我的CSDN博客地址 https://michael.blog.csdn.net/
長按或掃碼關注我的公眾號(Michael阿明),一起加油、一起學習進步!
總結
以上是生活随笔為你收集整理的LeetCode 1776. 车队 II(单调栈)的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: Paddle 使用预训练模型 实现快递单
- 下一篇: LeetCode 2087. 网格图中机