134. Gas Station

思路:

如果有解,那么从头走到尾,总盈利是大于0的。如果到某一天,1. 之前总利润是亏损的,设为-A,但是从这天开始到截止日期,是盈利的,盈利额设为B。

那么-A+B>0,那么从这点开始是可以环游的,因为后半程赚的比前半程亏损是多的. 2.从这点出发走到截止的时候,必须每一站都满足条件1,因为不然到了这点就走不下去了 

 

注意的问题:

对于如果从开始到某一天不可以,那么其中任意一天都不可以的,只能从下一天开始的理由是:

如果0-4天突然发现不可以了,那么说明从1,2,3任意一天都不可以,因为0-3是可以的,但是3无法到4,0-2也是可以的,所以2-4是不可以的,0-1是可以的,1-4是不可以的。

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

 

posted @ 2016-06-17 06:42  warmland  阅读(127)  评论(0编辑  收藏  举报