难度:
Hard
题意:
思路:
代码:
class Solution {
private int runTo(int start, int fuel, int target, PriorityQueue<Integer> queue) {
fuel -= target - start;
while (fuel < 0) {
Integer top = queue.poll();
if (top == null) {
return -1;
}
fuel += top;
}
return fuel;
}
public int minRefuelStops(int target, int startFuel, int[][] stations) {
PriorityQueue<Integer> queue = new PriorityQueue<>(new Comparator<Integer>() {
@Override
public int compare(Integer o1, Integer o2) {
return -Integer.compare(o1, o2);
}
});
int start = 0;
int fuel = startFuel;
for (int i = 0;i < stations.length;i++) {
fuel = runTo(start, fuel, stations[i][0], queue);
if (fuel == -1) {
return fuel;
}
queue.add(stations[i][1]);
start = stations[i][0];
}
if (runTo(start, fuel, target, queue) != -1) {
return stations.length - queue.size();
} else {
return -1;
}
}
}