LeetCode刷题_c++版-871最低加油次数

此题的思路与跳跃游戏二中的思路类似,都是求最小跳跃次数,用贪心的思想
https://blog.csdn.net/weixin_44343355/article/details/128775970

class Solution {
    
    
public:
    int minRefuelStops(int target, int startFuel, vector<vector<int>>& stations) {
    
    
        if(stations.size() == 0){
    
    
            if(target > startFuel) return -1;
            else return 0;
        }
        // if(stations.size() == 1){
    
    
        //     if(target < startFuel) return 0;
        //     else if(stations[0][0] > startFuel || (stations[0][1]+startFuel) < target) return -1;
        //     else return 1;
        // }
        int leftFuel = startFuel;//剩余油量
        priority_queue<int, vector<int>, less<int>> maxFuel;//途中站点的最大油量,加过油的站点就不能再加油了,所以用 堆来存储,依次输出最大站点
        int addFuelTimes = 0;//加油次数
        int i = 0;
        int maxfuel = 0;
        vector<int> target_vector;
        target_vector.push_back(target);
        target_vector.push_back(0);
        stations.push_back(target_vector);
        for(i = 0; i< stations.size(); i++){
    
    
            //cout<< "i="<<i<<" ";
            leftFuel = startFuel - stations[i][0];//剩余油量
            //剩余油量小于等于0,则表明过程中需要加一次油
            //无法到达该点,先加油
            while(leftFuel < 0 && maxFuel.size()>0){
    
    
                
                maxfuel = maxFuel.top();
                maxFuel.pop();
                leftFuel = leftFuel + maxfuel;
                startFuel = startFuel +maxfuel;
                addFuelTimes ++;
            }
            if(leftFuel<0) return -1;
            maxFuel.push(stations[i][1]);

            //前面所有站点的油都加完了,如果还到不了该点,返回无法到达
            
            //cout<<endl;
            

            }return addFuelTimes;
            
    
        }
    
};  

在这里插入图片描述

猜你喜欢

转载自blog.csdn.net/weixin_44343355/article/details/128786011