- 算法
贪心 - 核心思想
这道题第一反应就是计算差值,然后根据最大值进行选取起点。但是这里存在一个问题:选取最高点还是选取最长连续的起点,最后我选择暴力遍历。但是在每次油量为负数时,下次从当前位置的下一点开始。不然会超时。
后来看了解析,发现大方向没有错误,问题出在了应该找最小值,如果最小值为小于0,则直接返回-1;不然就返回下一个位置。 - 代码
class Solution {
public int canCompleteCircuit(int[] gas, int[] cost) {
int[] sub = new int[2 * gas.length];
int sign = -1;
for(int i = 0;i < gas.length;i++){
sub[i] = gas[i] - cost[i];
sub[i+gas.length] = gas[i] - cost[i];
if(sub[i] >= 0 && sign == -1) sign = i;
}
for(int i = 0;i < gas.length;i++){
if(sub[i] >= 0){
int temp = 0;
for(int j = i;j < gas.length+i;j++){
temp += sub[j];
if(temp < 0){
i = j;
break;
}
}
if(temp >= 0) return i;
}
}
return -1;
}
}