134. Gas Station

仅供自己学习

 

这是贪心可以解决的问题。我们遍历每个加油站,并且贪心的标准是 sum_gas - sum_cost >0,否则start 起点得加一。又因为不管从哪个加油站开始,绕一圈得到的 sum_gas - sum_cost都是相同的,所以如果是一个可以回到起点的数据,那么 就会大一0,否则就会小于0,也就该组数据不能绕一圈还能回到起点.所以我们用两个变量,一个total用来记录 所有station的sum_gas - sum_cost,另一个sum用来判断是否满足贪心的标准,只要 sum<0,那么他就记0,并且start 为当前起点加一。

 

代码:

 1 class Solution {
 2 public:
 3     int canCompleteCircuit(vector<int>& gas, vector<int>& cost) {
 4         int size=gas.size();
 5         int sum=0,total=0;
 6         int start=0;
 7         for(int i=0;i<size;++i){
 8             total +=gas[i]-cost[i];
 9             sum +=gas[i] - cost[i];
10             if(sum<0){
11                 start =i+1;
12                 sum =0;
13             }
14         }
15         return (total<0)? -1:start;
16     }
17 };

 

posted @ 2021-02-24 15:20  Mrsdwang  阅读(113)  评论(0编辑  收藏  举报