每日一题871. 最低加油次数

Posted 王六六的IT日常

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了每日一题871. 最低加油次数相关的知识,希望对你有一定的参考价值。

871. 最低加油次数
困难题
参考:【宫水三叶】简单优先队列(堆)贪心题
题目思路:
- 将路上的一个个加油站 视为 一桶桶的油,每次经过的时候,就把油带上放后备箱;
- 当油不够的时候,取出后备箱所带的 最多的那桶油 加进油箱
- 这样以来,如若油箱和后备箱的油加起来都不够,那么就到不了了

class Solution 
    public int minRefuelStops(int target, int startFuel, int[][] stations) 
        // 使用优先队列,承装所经过加油站的油
        PriorityQueue<Integer> q = new PriorityQueue<>((o1, o2) -> (o2 - o1));
        int ans = 0, len = stations.length;
        // 特判:
        if (len < 1) return startFuel < target ? -1 : 0;
        int fuel = startFuel;// 加进油箱的油(含使用过的)
        // 经过可以到达的所有的加油站,背上里面的油
        for (int i = 0; i < len; i ++) 
            while (fuel < stations[i][0]) 
                Integer add = q.poll();
                if (add == null) return -1;
                fuel += add;
                ans ++;
            
            q.offer(stations[i][1]);
        
        // 已经经过所有的加油站仍未到达,则用车油箱和后备箱里的所剩的fuel,以期到达
        while (fuel < target) 
            Integer add = q.poll();
            if (add == null) return -1;
            fuel += add;
            ans ++;
        
        return ans;
    

以上是关于每日一题871. 最低加油次数的主要内容,如果未能解决你的问题,请参考以下文章

POJ 2431 Expedition

每日一题481. 神奇字符串

每日一题481. 神奇字符串

2021-09-04:加油站。在一条环路上有 N 个加油站,其中第 i 个加油站有汽油 gas[i] 升。你有一辆油箱容量无限的的汽车,从第 i 个加油站开往第 i+1 个加油站需要消耗汽油 cost

[LeetCode] 871. Minimum Number of Refueling Stops 最少的加油站个数

复健运动poj2431