思路:每个加油站提供的油减去下一段路上耗费的油,生成新的数组。循环数组长度2倍的量,找出其中一段长度为数组长且每部的剩余油量都不小于0的;
public class Solution {
public int canCompleteCircuit(int[] gas, int[] cost) {
int[] n = new int[gas.length];
for (int i = 0; i < n.length; i++) {
n[i] = gas[i] - cost[i];
}
int sum = 0;
int begin = 0;
int truebegin=0;
for (int i = 0; i < n.length*2; i++) {
sum += n[i%n.length];
while (sum < 0) {
sum -= n[truebegin];
begin++;
truebegin=begin%n.length;
}
if (i-begin>=n.length) {
return truebegin;
}
}
return -1;
}
}
本文介绍了一种解决特定加油站问题的算法思路:通过计算每个加油站提供的油与下一段路程消耗之间的差额,形成新的数组。该算法循环遍历数组两倍长度,寻找一段长度等于原数组长度的子序列,确保其每部分的剩余油量都不小于0。
3025

被折叠的 条评论
为什么被折叠?



