134. 加油站

 1 class Solution 
 2 {
 3 public:
 4     int canCompleteCircuit(vector<int>& gas, vector<int>& cost) 
 5     {
 6         int n = gas.size();
 7         for(int i = 0;i < n;i ++)
 8         {
 9             int cur = i;//备份
10             int c = cost[cur];//当前消耗
11             int count = gas[cur];//当前总油量
12             cur++;//下一个
13             if(cur == n) cur = 0;//如果下一个跳到n,则置为零
14             while(cur != i)
15             {
16                 if(count < c) break;//如果当前总油量小于当前消耗,直接终止循环
17                 count = count - c + gas[cur];//更新当前总油量
18                 c = cost[cur];//备份当前消耗
19                 cur++;//下一个
20                 if(cur == n) cur = 0;//如果下一个跳到n,则置为零
21             }
22             if(count >= c) return i;//如果当前总油量大于等于当前消耗,则返回索引
23         }
24         return -1;
25     }
26 };

 

 1 class Solution 
 2 {
 3 public:
 4     int canCompleteCircuit(vector<int>& gas, vector<int>& cost) 
 5     {
 6         int rest = 0, run = 0, start = 0;
 7         for (int i = 0; i < gas.size(); ++i)
 8         {
 9             run += (gas[i] - cost[i]);
10             rest += (gas[i] - cost[i]);//每一个(油量与消耗之差)求和
11             if (run < 0)//如果油量与消耗之差求和小于0,立即下一个
12             {
13                 start = i + 1;
14                 run = 0;
15             }
16         }
17         return rest < 0 ? -1: start;//(油量与消耗之差)总和是否小于0
18     }   
19 };

 

posted @ 2020-04-02 13:42  Jinxiaobo0509  阅读(109)  评论(0)    收藏  举报