public class GasCircuit {
int gas[];//每个加油站的油数量
int cost[];//从i-i+1需要i数量的汽油
public void canCompleteCircuit(int[] gas, int[] cost) {
this.gas = gas;
this.cost =cost;
/**
*依此遍历每个加油站
*/
for(int i = 0; i<gas.length;i++){
int result = jiSuan(i);
if(result!=-1) System.out.println("从索引为"+i+"的加油站可以跑一圈");
else{System.out.println("从索引为"+i+"的加油站不能跑一圈");}
}
}
int jiSuan(int startGas){//startGas :开始的加油站
int currentGasNum = 0; //车辆初始汽油
int currentGas = startGas;
while(true){
currentGasNum+=gas[currentGas]; //获取当前加油站的汽油
if(currentGasNum>=cost[currentGas]) { //如果当前汽油大于或者等于所需汽油继续
currentGasNum-=cost[currentGas];//当前汽油数减去所需汽油数
if(currentGas==gas.length-1){currentGas = 0;}//如果当前站位最后一站 则到达站位的索引为0 ;
else{currentGas++;}//如果当前站不为最后一站 则到达站位currentGas++
if(currentGas==startGas) return startGas;//判断到达站是否为起始站 “是”则返回起始站索引
}
else{return -1;}//如果当前汽油小于需要汽油 返回-1;
}
}
public static void main(String[] args) {
int gas[] = {3,3,4};
int cost[] = {3,4,4};
new GasCircuit().canCompleteCircuit(gas, cost);
}
}