LC.P871[最低加油次数]

方法一:贪心+优先队列

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
class Solution {
public int minRefuelStops(int target, int startFuel, int[][] stations) {
int ans = 0, remain = startFuel, x = 0, n = stations.length, i = 0;
PriorityQueue<Integer> q = new PriorityQueue<>((a, b) -> b - a);
while (x < target) {
if (remain == 0) {
if (!q.isEmpty()) {
remain += q.poll();
++ans;
} else {
return -1;
}
}
x += remain;
remain = 0;
while (i < n && stations[i][0] <= x) q.offer(stations[i++][1]);
}
return ans;
}
}
  • 时间复杂度:$O(nlogn)$
  • 空间复杂度:$O(n)$