题目链接
题目分析
这个题初看没啥思路,但是细看的话可以用贪心来解决问题。
具体的思路写在代码中了
代码实现
class Solution {
public int canCompleteCircuit(int[] gas, int[] cost) {
int sum = 0;
//计算油量与消耗量之差的总和
for(int i = 0; i < gas.length; i++){
sum += gas[i] - cost[i];
}
//如果总和小于0,代表着这一趟无论你怎么走都是走不完的,直接返回-1
if(sum < 0){
return -1;
}
int cur = 0;
int start = 0;
//cur代表当前油量,我们从0开始走,当我们走到一个站之后,发现当前油量已经小于0了,说明从前一个位置走,到当前位置是一定会失败的。
//至于这里为什么start是i + 1呢,因为我们从[a, i - 1]都是可以成功走完的,只有第i位是失败的,说明第i位的耗油量远远大于0,所以从这里开始不现实,所以选择从i+1位走
for(int i = 0; i < gas.length; i++){
cur += gas[i] - cost[i];
//如果当前油量小于0,就直接更新起始位置
if(cur < 0){
start = i + 1;
cur = 0;
}
}
return start;
}
}