// 定义一个名为Solution的类
class Solution {
// 定义一个公开方法canCompleteCircuit,输入参数为两个整数数组gas和cost,分别代表加油站的汽油量和消耗油量
public int canCompleteCircuit(int[] gas, int[] cost) {
// 初始化当前剩余油量sum为0,总剩余油量totalSum为0,以及起始加油站索引index为0
int curSum = 0;
int totalSum = 0;
int index = 0;
// 遍历整个数组,模拟遍历一圈加油站
for (int i = 0; i < gas.length; i++) {
// 更新当前剩余油量:将当前位置加油站的汽油量减去消耗油量
curSum += gas[i] - cost[i];
// 同时累计总剩余油量
totalSum += gas[i] - cost[i];
// 当前剩余油量小于0时,说明从起点到当前位置无法完成循环,需要重新选择起点(即下一个加油站)
if (curSum < 0) {
index = (i + 1) % gas.length; // 确保新的起点仍然在数组范围内
curSum = 0; // 重置当前剩余油量为0
}
}
// 若总的剩余油量小于0,则无法找到满足条件的起点,返回-1表示无法完成环形路线
if (totalSum < 0) return -1;
// 否则,返回可以完成环形路线的起始加油站索引
return index;
}
}
这段Java代码是解决“加油站”问题的一个解决方案。给定一系列加油站及其对应的加油量和消耗油量,此方法寻找是否存在一个起始加油站,使得汽车能按照顺序经过所有加油站后回到起始站,且油量恰好用完。如果存在这样的环形行驶路线,则返回起始加油站的索引;若不存在,则返回-1。