We read every piece of feedback, and take your input very seriously.
To see all available qualifiers, see our documentation.
Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.
By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.
Already on GitHub? Sign in to your account
在一条环路上有 N 个加油站,其中第 i 个加油站有汽油 gas[i] 升。
gas[i]
你有一辆油箱容量无限的的汽车,从第 i 个加油站开往第 i+1 个加油站需要消耗汽油 cost[i] 升。你从其中的一个加油站出发,开始时油箱为空。
i+1
cost[i]
如果你可以绕环路行驶一周,则返回出发时加油站的编号,否则返回 -1。
说明:
示例 1:
输入: gas = [1,2,3,4,5] cost = [3,4,5,1,2] 输出: 3 解释: 从 3 号加油站(索引为 3 处)出发,可获得 4 升汽油。此时油箱有 = 0 + 4 = 4 升汽油 开往 4 号加油站,此时油箱有 4 - 1 + 5 = 8 升汽油 开往 0 号加油站,此时油箱有 8 - 2 + 1 = 7 升汽油 开往 1 号加油站,此时油箱有 7 - 3 + 2 = 6 升汽油 开往 2 号加油站,此时油箱有 6 - 4 + 3 = 5 升汽油 开往 3 号加油站,你需要消耗 5 升汽油,正好足够你返回到 3 号加油站。 因此,3 可为起始索引。
示例 2:
输入: gas = [2,3,4] cost = [3,4,3] 输出: -1 解释: 你不能从 0 号或 1 号加油站出发,因为没有足够的汽油可以让你行驶到下一个加油站。 我们从 2 号加油站出发,可以获得 4 升汽油。 此时油箱有 = 0 + 4 = 4 升汽油 开往 0 号加油站,此时油箱有 4 - 3 + 2 = 3 升汽油 开往 1 号加油站,此时油箱有 3 - 3 + 3 = 3 升汽油 你无法返回 2 号加油站,因为返程需要消耗 4 升汽油,但是你的油箱只有 3 升汽油。 因此,无论怎样,你都不可能绕环路行驶一周。
思路:
我们首先需要明白一件事情,要走完整个环的前提是gas的总量要大于cost的总量,这样才能有机会走完全程,在这种前提条件下,才会有题目中所说的起点的存在。
假设开始的时候设置的起点是start,从这里出发,如果当前的gas值大于cost值,就可以继续前进,此时到了下一个站点,剩余的gas加上当前的gas再减去cost是否大于零。
如果大于零,则继续前进,当达到某一个站点的时候,如果这个值小于0,则说明起点从这个点的中间的任何一个点都不能作为起点。
这个时候我们需要将下一个点作为起点,继续遍历,当遍历完整个环的时候,当前保存的起点就是所要求的点。
用实际的例子来说明一下
start 初始设置为0 循环gas这个数组 i = 0的时候 gas[0] = 1, cost[0] = 3 => curr < 0 说明消耗的油多余存量,无法达到目的地 不符合条件,继续下一个。 start 变为 1 将 curr 重置为0;
/** * @param {number[]} gas * @param {number[]} cost * @return {number} */ var canCompleteCircuit = function(gas, cost) { let total = 0; // 总的剩余油料 let curr = 0; // 当前站点的剩余油料 let start = 0; // 起始点 for(let i = 0; i < gas.length; i++) { curr += gas[i] - cost[i]; if (curr < 0) { start = i + 1; curr = 0; } total += gas[i] - cost[i] } return total >= 0 ? start: -1; };
时间复杂度:O(N) 遍历了一遍数组 空间复杂度:O(1) 开辟了常数级别的空间
The text was updated successfully, but these errors were encountered:
No branches or pull requests
在一条环路上有 N 个加油站,其中第 i 个加油站有汽油
gas[i]
升。你有一辆油箱容量无限的的汽车,从第 i 个加油站开往第
i+1
个加油站需要消耗汽油cost[i]
升。你从其中的一个加油站出发,开始时油箱为空。如果你可以绕环路行驶一周,则返回出发时加油站的编号,否则返回 -1。
说明:
示例 1:
示例 2:
思路:
我们首先需要明白一件事情,要走完整个环的前提是gas的总量要大于cost的总量,这样才能有机会走完全程,在这种前提条件下,才会有题目中所说的起点的存在。
假设开始的时候设置的起点是start,从这里出发,如果当前的gas值大于cost值,就可以继续前进,此时到了下一个站点,剩余的gas加上当前的gas再减去cost是否大于零。
如果大于零,则继续前进,当达到某一个站点的时候,如果这个值小于0,则说明起点从这个点的中间的任何一个点都不能作为起点。
这个时候我们需要将下一个点作为起点,继续遍历,当遍历完整个环的时候,当前保存的起点就是所要求的点。
用实际的例子来说明一下
start 初始设置为0
循环gas这个数组
i = 0的时候 gas[0] = 1, cost[0] = 3 => curr < 0 说明消耗的油多余存量,无法达到目的地 不符合条件,继续下一个。
start 变为 1 将 curr 重置为0;
时间复杂度:O(N) 遍历了一遍数组
空间复杂度:O(1) 开辟了常数级别的空间
The text was updated successfully, but these errors were encountered: