在一条环路上有 N 个加油站,其中第 i 个加油站有汽油 gas[i] 升。
你有一辆油箱容量无限的的汽车,从第 i 个加油站开往第 i+1 个加油站需要消耗汽油 cost[i] 升。你从其中的一个加油站出发,开始时油箱为空。
如果你可以绕环路行驶一周,则返回出发时加油站的编号,否则返回 -1。
说明:
如果题目有解,该答案即为唯一答案。
输入数组均为非空数组,且长度相同。
输入数组中的元素均为非负数。
class Solution {
public static int canCompleteCircuit(int[] gas, int[] cost) {
int index = 0;
int n = gas.length;
/**
* 枚举每一个出发点
*/
while (index < n) {
/**
* 当前出发点所能到达的节点数
*/
int cnt = 0;
/**
* 当前出发点所积攒的油量
*/
int sum = 0;
while (cnt < n) {
int i = (index + cnt) % n;
sum += gas[i] - cost[i];
if (sum < 0) {
break;
}
cnt++;
}
if (cnt == n) {
return index;
} else {
/**
* 比如index = 0, cnt = 3
* 那么 1-3为出发点的肯定不可以
*/
index = index + cnt + 1;
}
}
return -1;
}
}
心之所向,素履以往 生如逆旅,一苇以航