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 }