解题思路:
(1)我们可以将起始油量看做是第0次加油,接下来就是判断使用该油量可以到达的所有加油站,此时我们在油量最大的那个加油站加油,并记该加油站不可加油,即油量为0,并记加油次数加1
(2)接下来判断此时的油量是否可以到达目的地,如果可以则返回,如果不可以,继续判断该油量可以到达的所有加油站,并加上油量最大的那个加油站的油,并记该加油站不可加油,即油量为0,并记加油次数加1
(3)重复上述操作,值得注意的是,如果其中某一个加油站(目的地可以看做是一个空的加油站),即使加上了它前面所有的加油站的油都不可达,此时返回-1
class Solution {
public:
int minRefuelStops(int target, int startFuel, vector<vector<int>>& stations) {
int i = 0, res;
priority_queue<int> pq;
for (res = 0; startFuel < target; res++) {
while (i < stations.size() && stations[i][0] <= startFuel)
pq.push(stations[i++][1]);
if (pq.empty()) return -1;
startFuel += pq.top(), pq.pop();
}
return res;
}
};