每天一道LeetCode-----存在一个由加油站组成的环路,判断是否可以从某个加油站出发环绕一周
生活随笔
收集整理的這篇文章主要介紹了
每天一道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-----分糖果