题目描述:
标签:贪心算法
在一条环路上有 N 个加油站,其中第 i 个加油站有汽油 gas[i] 升。
你有一辆油箱容量无限的的汽车,从第 i 个加油站开往第 i+1 个加油站需要消耗汽油 cost[i] 升。你从其中的一个加油站出发,开始时油箱为空。
如果你可以绕环路行驶一周,则返回出发时加油站的编号,否则返回 -1。
代码:
思路分析:
1、如果gas的总和小于cost总和,那么无论从哪里出发,都不能跑一圈,即curSum<0
2、记录curSum计算过程中的最小值,如果min>=0则说明可以从I=0出发(说明累加值没有出现负数)
3、否则需要从非0节点出发,从后向前,看那个加油站能把这个负数填平,找到这个结点
class Solution {
public int canCompleteCircuit(int[] gas, int[] cost) {
int curSum = 0;
int min = Integer.MAX_VALUE;
for(int i = 0;i < gas.length;i++){
int res = gas[i] - cost[i];
curSum += res;
if(curSum < min){
min = curSum;
}
}
if(curSum < 0) return -1;
if(min >= 0) return 0;
for(int i = gas.length - 1;i > 0;i--){
int res = gas[i] - cost[i];
min += res;
if(min >= 0){
return i;
}
}
return -1;
}
}