leetcode 134 加油站

简介: leetcode 134 加油站

加油站


3ded3af4c50f4deeb0fe926b3aad406d.png1115ca972013478185a6d0f02907f629.png

先找可能存在开始点,再验证(超时)

先找到所有加油比消耗大的站点,是可能的开始点

然后依次验证上述点,发现油箱是负数的该点无效。发现科研走到开始点前一个并能到下一个的成功

class Solution {
public:
    int canCompleteCircuit(vector<int>& gas, vector<int>& cost) {
        int volume = 0;
        vector<int> start;
        for(int i=0 ; i<gas.size() ;i++)
        {
            if(gas[i] >= cost[i]) start.push_back(i); //找到可能开始的点
        }
        for(int i=0 ; i < start.size() ;i++)
        {
            int result = start[i];
        //    cout<<"result:"<<result<<endl;
            for(int j = result ; j <= gas.size(); j++) //验证点是否正确
            {
                if(j == gas.size()) j = 0; //循环数组
                volume += gas[j];
                volume -= cost[j];
                // cout<<j<<' '<<volume<<endl;
                if(volume < 0 )  //检查油箱
                {
                    volume=0;
                    break;
                }
                if((result == 0 && j== gas.size()-1 && volume >= 0)
                    ||(result!=0 && j == result-1 && volume >= 0 ) ) //验证点成功
                    return result;
            }
        }
        return -1;
    }
};

贪心算法

8b1777d51c5e4e72a19afec383f994c5.png

4625f682dcf6437d9e7f403dd12828e0.png

class Solution {
public:
    int canCompleteCircuit(vector<int>& gas, vector<int>& cost) {
        int curSum = 0;
        int totalSum = 0;
        int start = 0;
        for (int i = 0; i < gas.size(); i++) {
            curSum += gas[i] - cost[i]; //当前油箱
            totalSum += gas[i] - cost[i];//全局油箱
            if (curSum < 0) {   // 当前累加rest[i]和 curSum一旦小于0
                start = i + 1;  // 起始位置更新为i+1
                curSum = 0;     // curSum从0开始
            }
        }
        if (totalSum < 0) return -1; // 说明怎么走都不可能跑一圈了
        return start;
    }
};

二刷

class Solution {
public:
    int canCompleteCircuit(vector<int>& gas, vector<int>& cost) {
        int gaxBox = 0 , sumBox =0;
        int result = 0;
        for(int i=0 ; i<gas.size() ;i++)
        {
            sumBox = sumBox + gas[i] - cost[i];
            gaxBox = gaxBox + gas[i] - cost[i];     
            if(gaxBox < 0)
            {
                result = i+1;
                gaxBox = 0;
            }  
        }
        if(sumBox < 0) return -1;
        else return result;
    }
};


相关文章
|
3天前
|
索引
【力扣】134.加油站
【力扣】134.加油站
|
3天前
|
算法 vr&ar 图形学
☆打卡算法☆LeetCode 134. 加油站 算法解析
☆打卡算法☆LeetCode 134. 加油站 算法解析
|
6月前
|
算法 网络架构
代码随想录算法训练营第三十三天 | LeetCode 1005. K 次取反后最大化的数组和、134. 加油站、135. 分发糖果
代码随想录算法训练营第三十三天 | LeetCode 1005. K 次取反后最大化的数组和、134. 加油站、135. 分发糖果
33 0
|
7月前
|
算法
代码随想录Day28 贪心03 LeetCode T1005 K次取反后最大化的数组和 LeetCode T134 加油站 LeetCode T135 分发糖果
代码随想录Day28 贪心03 LeetCode T1005 K次取反后最大化的数组和 LeetCode T134 加油站 LeetCode T135 分发糖果
21 0
leetcode每日一题:134. 加油站
leetcode每日一题:134. 加油站
|
算法 Java C++
代码随想录刷题|LeetCode 1005.K次取反后最大化的数组和 134. 加油站 135. 分发糖果
代码随想录刷题|LeetCode 1005.K次取反后最大化的数组和 134. 加油站 135. 分发糖果
|
算法
力扣每日一题:134.加油站 贪心+暴力双解
力扣每日一题:134.加油站 贪心+暴力双解
200 0
|
算法
LeetCode只加油站问题
分享算法题解,不走弯路进大厂
110 0
|
3天前
|
算法 C++
【刷题】Leetcode 1609.奇偶树
这道题是我目前做过最难的题,虽然没有一遍做出来,但是参考大佬的代码,慢慢啃的感觉的真的很好。刷题继续!!!!!!
9 0