算法题:加油站

时间:2021-09-21 04:08:47
/*
 算法题:加油站
2017-12-05 
在一条环路上有 N 个加油站,其中第 i 个加油站有汽油gas[ i ],并且从第 i 个加油站前往第 i+1 个加油站需要消耗汽油cost[ i ]。


你有一辆油箱容量无限大的汽车,现在要从某一个加油站出发绕环路一周,一开始油箱为空。


写一个函数求可环绕环路一周时出发的加油站的编号,若不存在环绕一周的方案,则返回-1。


注意事项:
1、数据保证答案唯一。
2、O(n)时间和O(1)额外空间


格式:


输入行依次输入一个表示每个加油站的汽油的容量的数组 gas 和一个表示加油站之间耗油量的数组 cost ,
最后输出可环绕一周的加油站的编号,如果不存在则返回 -1。


样例输入


gas = [ 1,1,3,1 ]
cost = [ 2,2,1,1 ]


样例输出


2   

*/

/*
 * 方法:
 * sum  从第一个加油站开始遍历,统计经过的加油站减去加油站之间的消耗的汽油的和,小于0,此加油站开始不可取
 * total统计每个加油站减去加油站之间的消耗的汽油的总和
 * num  确定的加油站开始值
 * */

 
public class GasStation {
	
	
	private int  sum = 0;
	private int  total = 0;
	private int num = 0;
	
	public int GasCircle(int gas[],int cost[]){
		
		for(int i = 0;i<gas.length;i++){
			
			sum = sum + gas[i] - cost[i];
			total = total + gas[i] - cost[i];
			if(sum < 0){
				num = i;
				sum = 0;
			}
		}
		if(total < 0){
			return -1;
		}else{
			return num + 1;
		}
		
			
	}
	public static void main(String[] args) {
		int []gas = {1,1,3,1};
		int []cost= {2,2,1,1};
		GasStation gasstation = new GasStation();
		System.out.println(gasstation.GasCircle(gas, cost));
	}
	
}



如有错误和疑问欢迎指出赐教

算法题:加油站