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

一段循环的路上有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;
    }


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值