LeetCode 134. Gas Station
Question
There are n
gas stations along a circular route, where the amount of gas at the ith
station is gas[i]
.
You have a car with an unlimited gas tank and it costs cost[i]
of gas to travel from the ith
station to its next (i + 1)th
station. You begin the journey with an empty tank at one of the gas stations.
Given two integer arrays gas
and cost
, return the starting gas station’s index if you can travel around the circuit once in the clockwise direction, otherwise return -1
. If there exists a solution, it is guaranteed to be unique
Example 1:
1 | Input: gas = [1,2,3,4,5], cost = [3,4,5,1,2] |
Example 2:
1 | Input: gas = [2,3,4], cost = [3,4,3] |
Constraints:
gas.length == n
cost.length == n
1 <= n <= 105
0 <= gas[i], cost[i] <= 104
Source: https://leetcode.com/problems/gas-station/
Solution
We can abstract this problem as following:
Given a delta array int[] delta
, find a routine that sequentially traverses the array and makes the sum of $\delta$ always above or equal to zero during traversal, and return the start index of this routine. If there is no such routine, return -1
.
There are two critical properities, we will prove and explain them later:
- If $\sum_{i=0}^{n-1}{\delta_i} \ge0$, there must be at least one valid routine.
- If $\sum_{i=p}^{q}{\delta_i} <0$ and $\delta_p \ge0$, any indice between $p$ and $q$ (inclusive) are not the start index of a valid routine.
According to these two properties, we just need to traverse the array twice, one for checking whether a solution exists, the other for finding the first solution.
Proof for the first property (Mathematical induction):
Proof for the second property (better to understand by intuition):
Note that just from the sum of the whole delta array, we cannot determine the number of solutions. Multiple solutions may exist when the sum is zero or greater than zero. For example, [1, 2, 3, 4]
and [1, -1, 1, -1]
.
These two properties can also be used on many other situations.
1 | // two-pass, can be merged into one pass |
LeetCode 134. Gas Station