Learning Outcome
After this lesson, you should be able to prove why a failed fuel segment cannot contain a valid start.
Problem Statement
Given gas and cost arrays, return the start index that lets you complete the circuit, or -1 if impossible.
| Input | Output | Why |
|---|---|---|
gas = [1,2,3,4,5], cost = [3,4,5,1,2] | 3 | Starting at index 3 gives enough fuel to complete the full loop. |
Brute Force Approach
Try every station as a start and simulate the full circuit. This costs O(n^2).
Optimized Approach
Track total fuel and a local tank. If the local tank becomes negative at i, no start from the current candidate through i can work, so reset start to i + 1.
Exact Pseudocode
total = 0
tank = 0
start = 0
for i from 0 to n - 1:
diff = gas[i] - cost[i]
total += diff
tank += diff
if tank < 0:
start = i + 1
tank = 0
if total < 0:
return -1
return start
Reference Code
class Solution:
def canCompleteCircuit(self, gas, cost):
total = 0
tank = 0
start = 0
for i in range(len(gas)):
diff = gas[i] - cost[i]
total += diff
tank += diff
if tank < 0:
start = i + 1
tank = 0
return -1 if total < 0 else startSample Dry Run
| Step | State | Result |
|---|---|---|
| Indexes 0 to 2 | tank becomes negative repeatedly | start moves forward |
| Index 3 | diff = 3 | start = 3, tank positive |
| Index 4 | tank remains positive | candidate survives |
| Total check | total fuel is non-negative | return 3 |
Complexity
| Measure | Value | Reason |
|---|---|---|
| Time | O(n) | The arrays are scanned once. |
| Space | O(1) | Only total, tank, and start are stored. |
Edge Cases
- If total gas is less than total cost, return -1.
- The answer is unique in the standard version when one exists.
- Reset start only after local tank becomes negative.
Interview Checklist
- Track total feasibility separately from local tank.
- Reset candidate start to i + 1 on local failure.
- Return -1 when total is negative.
FAQs
Why can we skip starts before i + 1?If the tank from the candidate start to i is negative, any start inside that segment has even less helpful prefix fuel.
Why still need total?A local candidate can survive, but the whole circuit is impossible if total fuel is negative.
What is the core pattern?Greedy reset after a failed segment.
Discussion
0 comments
Ask a question or share what stood out to you.