当前位置:
首页 >
每天一道LeetCode-----存在一个由加油站组成的环路,判断是否可以从某个加油站出发环绕一周
发布时间:2024/4/19
65
豆豆
生活随笔
收集整理的这篇文章主要介绍了
每天一道LeetCode-----存在一个由加油站组成的环路,判断是否可以从某个加油站出发环绕一周
小编觉得挺不错的,现在分享给大家,帮大家做个参考.
Gas Station
原题链接Gas Station
加油站问题,判断是否能够从一个加油站开始行走环绕一周,其中gas[i]表示在第i个加油站可以获得的油量,cost[i]表示从第i个加油站到达第i+1个加油站所需的油量
如果gas[i] >= cost[i],那么可以说在加油站i处是盈利的
那么可以从每个盈利的加油站出发,判断是否可以环绕一周,当然这里有个小技巧,就是如果假设i, i+1, i+2, …, j这几个连续加油站都是盈利的,那么就只需要从i出发就可以,无需判断从i+1,i+2,…,j这几个加油站出发的情况
代码如下
class Solution { public:int canCompleteCircuit(vector<int>& gas, vector<int>& cost) {if(gas.empty()) return -1;int n = gas.size();int start = 0;while(start < n){if(gas[start] >= cost[start]){if(run(gas, cost, start))return start;while(start + 1 < n && gas[start + 1] >= cost[start + 1])++start;}++start;}return -1;} private:bool run(vector<int>& gas, vector<int>& cost, int start){int curPos = start;int curGas = gas[start];int n = gas.size();while(true){curGas -= cost[curPos];if(curGas < 0)return false;curPos = (curPos + 1) % n;if(curPos == start)return true;curGas += gas[curPos];}} };总结
以上是生活随笔为你收集整理的每天一道LeetCode-----存在一个由加油站组成的环路,判断是否可以从某个加油站出发环绕一周的全部内容,希望文章能够帮你解决所遇到的问题。
- 上一篇: 每天一道LeetCode-----复制无
- 下一篇: 每天一道LeetCode-----分糖果