Leetcode Top Interview ✨
GithubLinkedinXOfficial Website
  • Leetcode Top Interview 🎯
  • Guide to Calculating Algorithm Complexity 🚀
  • Topic 1 Array - String
    • 88. Merge Sorted Arrays 🧩
    • 27. Remove Element 🧹
    • 26. Remove Duplicates from Sorted Array 🚫
    • 80. Remove Duplicates from Sorted Array II 🚫🚫
    • 169. Majority Element 👑
    • 189. Rotate Array 🔄
    • 121. Best Time to Buy and Sell Stock 📈
    • 122. Best Time to Buy and Sell Stock II 📈💰
    • 55. Jump Game 🏃‍♂️
    • 45. Jump Game II 🏃‍♂️
    • 274. H-Index 📊
    • 380. Insert Delete GetRandom O(1) 🎲
    • 238. Product of Array Except Self 🔄
    • 134. Gas Station ⛽
    • 135. Candy 🍬
    • 42. Trapping Rain Water 🌧️
    • 13. Roman to Integer 🔢
    • 018 Integer to Roman
    • 58. Length of Last Word 🔠
    • 14. Longest Common Prefix 🌱
    • 151. Reverse Words in a String 🔄
    • 6. Zigzag Conversion 🔀
    • 28. Find the Index of the First Occurrence in a String 🔄
    • 68. Text Justification 🔄
  • Topic 2 Two Pointers
    • 125. Valid Palindrome 🚦
    • 392. Is Subsequence 📏
    • 167. Two Sum II - Input Array Is Sorted 🔍
    • 11. Container With Most Water 🏞️
    • 15. 3Sum 🌐
  • Topic 3 Sliding Window
    • 209. Minimum Size Subarray Sum 🌐
    • 3. Longest Substring Without Repeating Characters 🌐
    • 30. Substring with Concatenation of All Words 🌐
    • 76. Minimum Window Substring 🌐
  • Topic 4 Matrix
    • 36. Valid Sudoku 🌐
    • 54. Spiral Matrix 🌐
    • 48. Rotate Image 🔄
    • 73. Set Matrix Zeroes
    • 289. Game of Life 🖼️
  • Topic 5 Hashmap
    • 383. Ransom Note 🔍
    • 205. Isomorphic Strings 🔍
    • 290. Word Pattern 🧩
    • 242. Valid Anagram 🎢
    • 49. Group Anagrams 🤹‍♂️
    • 1. Two Sum 🔍
    • 202. Happy Number 🤩
    • 219. Contains Duplicate II 🔍
    • 128. Longest Consecutive Sequence 🔍
  • Topic 6 Intervals
    • 228. Summary Ranges 📊
    • 56. Merge Intervals 🔀
    • 57. Insert Interval 🆕
    • 452. Minimum Number of Arrows to Burst Balloons 🎈
  • Topic 7 Stack
    • 20. Valid Parentheses 🔍
    • 71. Simplify Path 🗺️
    • 155. Min Stack 🗃️
    • 150. Evaluate Reverse Polish Notation 🧠💻
    • 224. Basic Calculator 🧮
  • Topic 8 Linked List
    • 141. Linked List Cycle 🔁
    • 2. Add Two Numbers 🔢
    • 21. Merge Two Sorted Lists 🔗
    • 138. Copy List with Random Pointer 🔗
    • 92. Reverse Linked List II 🔄
      • Let’s explain step by step 🐇
    • 25. Reverse Nodes in k-Group 🔄
    • 19. Remove Nth Node From End of List 🗑️
    • 82. Remove Duplicates from Sorted List II ❌🔢
    • 61. Rotate List 🔄
    • 86. Partition List 🔗
    • 146. LRU Cache 🔗
  • Topic 9 Binary Tree General
    • 104. Maximum Depth of Binary Tree 🔗
    • 100. Same Tree 🔗
    • 226. Invert Binary Tree 🔗
    • 101. Symmetric Tree 🔗
    • 105. Construct Binary Tree from Preorder and Inorder Traversal 🔗
    • 106. Construct Binary Tree from Inorder and Postorder Traversal 🔗
    • 117. Populating Next Right Pointers in Each Node II 🔗
    • 114. Flatten Binary Tree to Linked List 🔗
    • 112. Path Sum 🔗
    • 129. Sum Root to Leaf Numbers 🔗
      • What_is_DFS
    • 124. Binary Tree Maximum Path Sum 🔗
Powered by GitBook
On this page
  • Description
  • Examples
  • Solution 💡
  • Java
  • Time Complexity ⏳
  • Space Complexity 💾

Was this helpful?

  1. Topic 1 Array - String

134. Gas Station ⛽

Difficulty: Medium - Tags: Greedy, Array

Description

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.

Examples

Example 1:

Input:

gas = [1,2,3,4,5]
cost = [3,4,5,1,2]

Output:

3

Explanation: Start at station 3 (index 3) and fill up with 4 units of gas. Your tank = 0 + 4 = 4.

  • Travel to station 4. Your tank = 4 - 1 + 5 = 8.

  • Travel to station 0. Your tank = 8 - 2 + 1 = 7.

  • Travel to station 1. Your tank = 7 - 3 + 2 = 6.

  • Travel to station 2. Your tank = 6 - 4 + 3 = 5.

  • Travel to station 3. The cost is 5. Your gas is just enough to travel back to station 3. Therefore, return 3 as the starting index.

Example 2:

Input:

gas = [2,3,4]
cost = [3,4,3]

Output:

-1

Explanation: You can't start at station 0 or 1, as there is not enough gas to travel to the next station. Let's start at station 2 and fill up with 4 units of gas. Your tank = 0 + 4 = 4.

  • Travel to station 0. Your tank = 4 - 3 + 2 = 3.

  • Travel to station 1. Your tank = 3 - 3 + 3 = 3. You cannot travel back to station 2, as it requires 4 units of gas but you only have 3. Therefore, you can't travel around the circuit once no matter where you start.


Solution 💡

The solution uses a greedy approach. The key idea is:

  • If the total gas is less than the total cost, it's impossible to complete the circuit.

  • If you can't reach station i+1 from station i, it means that starting from any station between 0 and i will not work either. Therefore, start fresh from station i+1.

Java

class Solution {
    public int canCompleteCircuit(int[] gas, int[] cost) {
        int totalTank = 0, currentTank = 0, startStation = 0;
        for (int i = 0; i < gas.length; i++) {
            totalTank += gas[i] - cost[i];
            currentTank += gas[i] - cost[i];
            if (currentTank < 0) {
                // If we can't reach station i+1, start from i+1
                startStation = i + 1;
                currentTank = 0;
            }
        }
        return totalTank >= 0 ? startStation : -1;
    }
}

With Example 1 an this solution

Station
Gas
Cost
Gas - Cost
Current Tank
Total Tank
Explanation

0

1

3

-2

-> 0

-2

Not enough gas to continue, move to next station

1

2

4

-2

-> 0

-4

Not enough gas to continue, move to next station

2

3

5

-2

-> 0

-6

Not enough gas to continue, move to next station

3

4

1

3

3

-3

Enough gas to continue, check if the circuit can be completed

4

5

2

3

6

0

Continue with sufficient gas, travel to next station

0

1

3

-2

4

-2

Continue with sufficient gas, move to next station

1

2

4

-2

2

-2

Continue with sufficient gas, move to next station

2

3

5

-2

0

-2

Continue with sufficient gas, move to next station

3

4

1

3

3

1

Completed the circuit with enough gas

Explanation of the Columns:

  • Station: The index of the gas station.

  • Gas: The amount of gas available at the station.

  • Cost: The cost to travel to the next station.

  • Gas - Cost: The difference between the gas available and the cost to travel.

  • Current Tank: The running total of gas after filling up and traveling to next gas, which is reset to 0 when moving to next station is impossible.

  • Total Tank: The overall surplus or deficit of gas after each station, updated cumulatively.

Time Complexity ⏳

  • We traverse the array once, making the time complexity O(n), where n is the number of stations.

Space Complexity 💾

  • The space complexity is O(1) since no extra space is used, just a few variables to store sums and indices.

Previous238. Product of Array Except Self 🔄Next135. Candy 🍬

Last updated 6 months ago

Was this helpful?

You can find the full Solution.java file .

here