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

被折叠的 条评论
为什么被折叠?



