汽車從起點出發駛向目的地,該目的地位於出發位置東面 target 英里處。spa
沿途有加油站,每一個 station[i] 表明一個加油站,它位於出發位置東面 station[i][0] 英里處,而且有 station[i][1] 升汽油。rest
假設汽車油箱的容量是無限的,其中最初有 startFuel 升燃料。它每行駛 1 英里就會用掉 1 升汽油。code
當汽車到達加油站時,它可能停下來加油,將全部汽油從加油站轉移到汽車中。blog
爲了到達目的地,汽車所必要的最低加油次數是多少?若是沒法到達目的地,則返回 -1 。get
注意:若是汽車到達加油站時剩餘燃料爲 0,它仍然能夠在那裏加油。若是汽車到達目的地時剩餘燃料爲 0,仍然認爲它已經到達目的地。it
示例 1:io
輸入:target = 1, startFuel = 1, stations = []
輸出:0
解釋:咱們能夠在不加油的狀況下到達目的地。class
示例 2:queue
輸入:target = 100, startFuel = 1, stations = [[10,100]]
輸出:-1
解釋:咱們沒法抵達目的地,甚至沒法到達第一個加油站。top
示例 3:
輸入:target = 100, startFuel = 10, stations = [[10,60],[20,30],[30,30],[60,40]]
輸出:2
解釋:
咱們出發時有 10 升燃料。
咱們開車來到距起點 10 英里處的加油站,消耗 10 升燃料。將汽油從 0 升加到 60 升。
而後,咱們從 10 英里處的加油站開到 60 英里處的加油站(消耗 50 升燃料),
並將汽油從 10 升加到 50 升。而後咱們開車抵達目的地。
咱們沿途在1兩個加油站停靠,因此返回 2 。
提示:
1 <= target, startFuel, stations[i][1] <= 10^9
0 <= stations.length <= 500
0 < stations[0][0] < stations[1][0] < ... < stations[stations.length-1][0] < target
AC代碼:
struct Solution { priority_queue<int> Q; int minRefuelStops(int target,int startFuel,vector<vector<int>>& sta) { vector<int> v={target,0}; sta.push_back(v); int cnt=0, pos=0, rest=startFuel; for(int i=0;i<sta.size();i++) { int dist=sta[i][0]-pos; while(rest<dist) { if(Q.empty()) return -1; rest+=Q.top(); Q.pop(); cnt++; } rest-=dist; pos=sta[i][0]; Q.push(sta[i][1]); } return cnt; } };