Gas Station

      题意很清晰,每个加油站有一定的油,到下一个站需要消耗一定的油量,这个关系是固定的,这样我们就可以用一个数组来表示汽车到每个加油站以及接下来一段路程增加的油量,即gas[i]-cost[i];

      例如:gas   5 0 9 4 3

              cost   6 7 5 9 5

              seq    -1 -7 4 -5 -2

这就变成了一个最大连续子序列和的拓展问题,算法说明见链接http://blog.csdn.net/hcbbt/article/details/10454947

 1 class Solution {
 2 public:
 3     int canCompleteCircuit(vector<int> &gas, vector<int> &cost) {
 4         int gasLen = gas.size();
 5         int sum = -1;
 6         int index =-1;
 7         bool round = false;
 8         int cnt =0;
 9         if(gasLen == 0)
10             return -1;
11         for(int i=0;i<gasLen;i++)
12         {
13             gas[i] = gas[i]-cost[i];
14         }
15         for(int i=0;i<2*gasLen-1;i++)
16         {
17             if(sum<0)
18             {
19                if(i>=gasLen)
20                     break;
21                sum = gas[i];
22                index = i;
23                cnt = 1;
24             }
25             else
26             {
27                sum += gas[i%gasLen];
28                cnt++;
29             }
30             if(sum>=0&&cnt == gasLen)
31                 break;
32 
33         }
34         if(sum<0)
35             return -1;
36         return index;
37     }
38 };

 

posted @ 2014-09-11 22:56  醉剑客  阅读(1318)  评论(0编辑  收藏  举报