每次用优先队列保存每个加油站可以加的油 , 如果达不到下一个加油站或终点站时,就拿一个最大的加油 (保证答案次数最少,越大开的越远嘛)
注意随时判断对否到达了终点站!
cpp
复制代码
class Solution {
public:
int minRefuelStops(int target, int startFuel, vector<vector<int>>& stations) {
if(startFuel >= target)return 0;
int ans=0;
priority_queue<int> pq; //放已经走过的加油站可以加的油
for(auto i:stations)
{
if(i[0] > startFuel)
{
while(!pq.empty() && startFuel < i[0])
{
startFuel += pq.top();
pq.pop();
ans++;
if(startFuel >= target)return ans;
}
if(startFuel < i[0])
return -1;
}
pq.push(i[1]);
}
while(!pq.empty() && startFuel < target)
{
startFuel += pq.top();
pq.pop();
ans++;
if(startFuel >= target)return ans;
}
if(startFuel < target)return -1;
return ans;
}
};