Skip to content
QuizMaker logoQuizMaker
Activity
DSA Course: Interview Patterns and Problem Solving
Module 13: Greedy Algorithms
Best Time to Buy and Sell Stock: Greedy Pattern
Maximum Subarray: Kadane Pattern
Move Zeroes: Two pointers Pattern
Contains Duplicate: Set Pattern
Valid Anagram: Frequency map Pattern
Longest Substring Without Repeating Characters: Sliding window Pattern
Valid Palindrome: Two pointers Pattern
Longest Palindromic Substring: Expand around center Pattern
Group Anagrams: Hash key Pattern
Binary Search: Classic search Pattern
Search Insert Position: Lower bound Pattern
First Bad Version: Predicate search Pattern
Search in Rotated Sorted Array: Rotated search Pattern
Find Minimum in Rotated Sorted Array: Rotated minimum Pattern
Valid Parentheses: Stack matching Pattern
Min Stack: Auxiliary stack Pattern
Daily Temperatures: Monotonic stack Pattern
Next Greater Element I: Monotonic stack Pattern
Evaluate Reverse Polish Notation: Stack evaluation Pattern
Reverse Linked List: Pointer reversal Pattern
Merge Two Sorted Lists: Dummy node Pattern
Linked List Cycle: Fast and slow pointers Pattern
Middle of the Linked List: Fast and slow pointers Pattern
Remove Nth Node From End: Two pointers Pattern
Binary Tree Traversals: DFS recursion Pattern
Maximum Depth of Binary Tree: Height recursion Pattern
Binary Tree Level Order Traversal: BFS queue Pattern
Validate Binary Search Tree: Range bounds Pattern
Lowest Common Ancestor: Recursive split Pattern
Connected Components: Adjacency DFS Pattern
Number of Islands: Grid DFS Pattern
Flood Fill: Boundary DFS Pattern
Clone Graph: Hash Map DFS Pattern
Course Schedule: Topological Sort Pattern
Union Find Components: Disjoint Set Pattern
Shortest Path in Unweighted Graph: BFS Distance Pattern
Climbing Stairs: Fibonacci DP Pattern
House Robber: Pick or Skip DP Pattern
Coin Change: Minimum Coins DP Pattern
Longest Increasing Subsequence: Binary Search DP Pattern
Longest Common Subsequence: 2D DP Pattern
0/1 Knapsack: Capacity DP Pattern
Longest Consecutive Sequence: Hash Set Pattern
Subarray Sum Equals K: Prefix Sum Hashmap Pattern
First Unique Character: Frequency Map Pattern
Find Duplicates: Frequency Map Pattern
Ransom Note: Character Availability Pattern
Sort Colors: Dutch National Flag Pattern
Next Permutation: Pivot and Suffix Reversal Pattern
Merge Intervals: Sort and Sweep Pattern
Find First and Last Position: Boundary Binary Search Pattern
Search a 2D Matrix: Flattened Binary Search Pattern
Subsets: Pick or Skip Recursion Pattern
Generate Parentheses: Valid State Backtracking Pattern
Combination Sum: Reuse Choice Backtracking Pattern
N-Queens: Constraint Backtracking Pattern
Word Search: Grid Backtracking Pattern
Kth Largest Element: Size-K Min-Heap Pattern
Top K Frequent Elements: Frequency Heap Pattern
Merge K Sorted Lists: Min-Heap Multiway Merge Pattern
Median Finder: Two Heaps Pattern
Task Scheduler: Greedy Max-Heap Pattern
Jump Game: Farthest Reach Greedy Pattern
Gas Station: Greedy Reset Pattern
Non-overlapping Intervals: Earliest End Greedy Pattern
Minimum Arrows to Burst Balloons: Interval End Greedy Pattern
Partition Labels: Last Occurrence Greedy Pattern
Single Number: XOR Cancellation Pattern
Power of Two: n and n-1 Pattern
Number of 1 Bits: Brian Kernighan Pattern
Single Number III: Rightmost Set Bit Pattern
XOR From 1 to N: Modulo Cycle Pattern
Prime Check: Square Root Trial Division Pattern
Sieve of Eratosthenes: Prime Marking Pattern
GCD: Euclidean Remainder Pattern
Binary Exponentiation: Fast Power Pattern
Modular Inverse: Extended Euclid Pattern
Implement Trie: Prefix Tree Pattern
Longest Common Prefix: Single Branch Trie Pattern
LRU Cache: Hash Map Plus Recency List Pattern
Segment Tree: Range Sum Query Pattern
Fenwick Tree: Binary Indexed Prefix Sum Pattern
CONTENTS

Gas Station: Greedy Reset Pattern

Find a valid circular starting station by resetting after negative fuel.

DSA Course: Interview Patterns and Problem Solving
Module 13: Greedy Algorithms
dsa
greedy-algorithms
+1
May 29, 2026
23
A

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.

InputOutputWhy
gas = [1,2,3,4,5], cost = [3,4,5,1,2]3Starting 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 start

Sample Dry Run

StepStateResult
Indexes 0 to 2tank becomes negative repeatedlystart moves forward
Index 3diff = 3start = 3, tank positive
Index 4tank remains positivecandidate survives
Total checktotal fuel is non-negativereturn 3

Complexity

MeasureValueReason
TimeO(n)The arrays are scanned once.
SpaceO(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.

Share this article

Share on TwitterShare on LinkedInShare on FacebookShare on WhatsAppShare on Email

Test your knowledge

Take a quick quiz based on this chapter.

hardDSA Course
Gas Station - Greedy Reset Pattern Practice Quiz
5 questions8 min

0 comments

Please login to comment.
No comments yet.
Lesson 2 of 5 in Module 13: Greedy Algorithms
Previous in Module 13: Greedy Algorithms
Jump Game: Farthest Reach Greedy Pattern
Next in Module 13: Greedy Algorithms
Non-overlapping Intervals: Earliest End Greedy Pattern
Back to DSA Course: Interview Patterns and Problem Solving
Back to moduleCategories