题目描述及其数据范围
解题思路
这个题目虽然写明的是困难难度,但其实如果把思路理清,就很好思考了,就是一个简单的贪心问题,因为加油没有消耗,所以我们可以想象,对于任意一个点,如果我们当前的油足够到达下一个点(或者终点)时,按照贪心的想法,我们不需要再继续加油了,可以留到下一个点再考虑,而如果我们当前的油不足以到达下一个点,也就说明我们在之前的点中需要加若干次油,按照贪心的思想,则往前寻找一个油量最大的点,把油加上即可。而且从数据范围可以看到,我们甚至不需要维护优先队列,暴力搜索也可以很好的解决问题
解题代码
class Solution {
public int minRefuelStops(int target, int startFuel, int[][] stations) {
int nextX = startFuel,ans = 0,nowIndex = 0,maxFuelIndex = -1;
int[][] nowStation = new int[stations.length][2];
startFuel = 0;
while(nextX < target)
{
while(nowIndex < stations.length&&stations[nowIndex][0] <= nextX)
{
nowIndex ++;
}
maxFuelIndex = -1;
for(int i = 0;i < nowIndex; i++)
{
if(stations[i][1] > startFuel)
{
startFuel = stations[i][1];
maxFuelIndex = i;
}
}
if(startFuel == 0) return -1;
ans ++;
nextX += startFuel;
startFuel = 0;
stations[maxFuelIndex][1] = 0;
}
return ans;
}
}