134. Gas Station
题目
在一个环形路线上有N个加油站,在加油站的汽油量为 gas[i]。
你有一辆可以装无限量汽油的小车,从加油站[i]到它的下一站[i+1]需要消耗 cost[i] 的汽油。从某一个加油站以空邮箱开始你的旅程。
如果你可以绕着环形路线行驶一圈,返回开始加油站的索引,否则返回-1。
注意:答案是唯一的。
代码块
class Solution {
public static int canCompleteCircuit(int[] gas, int[] cost) {
int start = 0;
int curGas = 0;//初始化
int sum = 0;
for(int i = 0; i < gas.length; i++){
curGas += gas[i] - cost[i];//+=
sum += gas[i] - cost[i];
if(curGas < 0){ //当前油量不够行驶到下一站。
// start++;
start = i+1;
curGas = 0;
}
}
if(sum < 0){ // 总的油量不够行驶一圈。
return -1;
}else{
return start;
}
}
public static void main(String[] args) {
int[] gas = {1,2,4};
int[] cost = {2,1,3};
System.out.println(canCompleteCircuit(gas, cost));
}
}
代码分析
这道题一开始没看懂题意,然后就去搜代码,以及解析,debug后才能基本理解。
问题一:没有“+=”,就不能做到累加。
问题二:没有初始化变量curGas和sum,就去“+=”;所以报错。
问题三:不知道循环体的范围。把所有都写到了for循环体内。理解不到位。