加油站算法

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);
	}
}

 

评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值