题目链接
英文链接:https://leetcode.com/problems/gas-station/
中文链接:https://leetcode-cn.com/problems/gas-station/
题目详述
在一条环路上有 N 个加油站,其中第 i 个加油站有汽油 gas[i] 升。
你有一辆油箱容量无限的的汽车,从第 i 个加油站开往第 i+1 个加油站需要消耗汽油 cost[i] 升。你从其中的一个加油站出发,开始时油箱为空。
如果你可以绕环路行驶一周,则返回出发时加油站的编号,否则返回 -1。
说明:
- 如果题目有解,该答案即为唯一答案。
- 输入数组均为非空数组,且长度相同。
- 输入数组中的元素均为非负数。
示例 1:
1 | 输入: |
示例 2:
输入:
1 | gas = [2,3,4] |
题目详解
暴力方法:
- 遍历每一个位置作为起点,看能否走完一圈。
- 时间复杂度为
O(n^2)
。
1 | public class LeetCode_00134 { |
贪心。
- 当起点为
i
,前进过程中发现无法到达j
,可以直接令新的起点为j + 1
。中间的点可以跳过,因为以中间的点为起点必然会失败。 - 时间复杂度为
O(n)
。
1 | public class LeetCode_00134 { |
- 如果一个数组的总和非负,那么一定可以找到其中找到一个点开始,累加和一直都是非负的。从这个角度考虑,如果汽油的总量大于等于它的消耗量。那么可以环形一周;否则不能。
- 遍历数组,发现当前汽油与消耗量差值累加和小于 0,则令起点为当前位置的下一个位置。
- 最后判断汽油的总量是否大于等于它的消耗量,若是则返回之前记录的结果,否则返回 -1。
- 时间复杂度为
O(n)
。
1 | public class LeetCode_00134 { |