解題思路
第一步是想要怎麼找出最後速度會相等的車?速度最後會相等,代表出發位置靠後的車會趕上前面的車,也表示靠後的車原本到達目的地的時間會比較短。
時間的計算則是 (目的地位置 - 出發位置) / 車速。
又因為兩車相遇後,快車速度變慢,所以用stack紀錄有哪些車,而快車就不放進去。最後stack長度即為解。
程式碼
class Solution { public: int carFleet(int target, vector<int>& position, vector<int>& speed) { vector<pair<int, int>> cars; for(int i=0; i<position.size(); i++) cars.push_back(make_pair(position[i], speed[i])); sort(cars.begin(), cars.end()); stack<pair<int, int>> st; st.push(cars.back()); double currentTime = (target - cars.back().first) / (double)cars.back().second; for(int i=cars.size() - 2; i>=0; i--) { if((target - cars[i].first)/(double)cars[i].second > currentTime) { st.push(cars[i]); currentTime = (target - cars[i].first)/(double)cars[i].second; } } return st.size(); } };
沒有留言:
張貼留言