leedcode做题总结,题目Gas Station-------- 2013/09/28

来源:互联网 发布:mysql读写分离实现 编辑:程序博客网 时间:2024/06/05 20:56

一段循环的路上有N个加油站,2个数组分别是每个加油站加油量和去下一个加油站的花费量。

一开始从每个节点开始历遍一圈,果断超时。

后来想了另一种方法,假设从点A开始,如果到点M油的积累量小于0了,则必然不会从0~M区间中开始,一位车到达区间中任何一点是油箱里都有剩油,在有剩油的情况下出发到M点都没油了更何况邮箱为空的情况下出发。

所以起点暂定为(M+1)%N,如果后面又出现积累量小于0的情况需要更新M。

全部历遍完了判断总的积累量是否大于等于0,是的话就说明可以跑完一圈。


public int canCompleteCircuit(int[] gas, int[] cost) {        int gas1=0;        int gas2=0;        int tmp=0;        for(int i=0;i<gas.length;i++){            gas1=gas1+gas[i]-cost[i];            gas2=gas2+gas[i]-cost[i];                        if(gas1<0){                tmp=(i+1)%gas.length;                gas1=0;            }                    }        if(gas2<0)return -1;        return tmp;    }


0 0