Algobase
  • Introduction
  • Leetcode
    • 226. Invert Binary Tree
    • 136. Single Number
    • 104. Maximum Depth of Binary Tree
    • 344. Reverse String
    • 461. Hamming Distance
    • 617. Merge Two Binary Trees
    • 237. Delete Node in a Linked List
    • 412. Fizz Buzz
    • 206. Reverse Linked List
    • 169. Majority Element
    • 108. Convert Sorted Array to Binary Search Tree
    • 283. Move Zeroes
    • 122. Best Time to Buy and Sell Stock II
    • 242. Valid Anagram
    • 171. Excel Sheet Column Number
    • 217. Contains Duplicate
    • 448. Find All Numbers Disappeared in an Array
    • 13. Roman to Integer
    • 21. Merge Two Sorted Lists
    • 100. Same Tree
    • 121. Best Time to Buy and Sell Stock
    • 350. Intersection of Two Arrays II
    • 268. Missing Number
    • 118. Pascal's Triangle
    • 387. First Unique Character in a String
    • 38. Count and Say
    • 26. Remove Duplicates from Sorted Array
    • 1. Two Sum
    • 53. Maximum Subarray
    • 101. Symmetric Tree
    • 70. Climbing Stairs
    • 543. Diameter of Binary Tree
    • 9. Palindrome Number
    • 191. Number of 1 Bits
    • 202. Happy Number
    • 326. Power of Three
    • 198. House Robber
    • 66. Plus One
    • 724. Find Pivot Index
    • 155. Min Stack
    • 14. Longest Common Prefix
    • 278. First Bad Version
    • 125. Valid Palindrome
    • 172. Factorial Trailing Zeros
    • 20. Valid Parentheses
    • 234. Palindrome Linked List
    • 88. Merge Sorted Array
    • 190. Reverse Bits
    • 160. Intersection of Two Linked Lists
    • 141. Linked List Cycle
    • 189. Rotate Array
    • 28. Implement strStr()
    • 69. Sqrt(x)
    • 204. Count Primes
    • 581. Shortest Unsorted Continuous Subarray
    • 7. Reverse Integer
    • 763. Partition Labels
    • 338. Counting Bits
    • 406. Queue Reconstruction by Height
    • 46. Permutations
    • 94. Binary Tree Inorder Traversal
    • 739. Daily Temperature
    • 22. Generate Parentheses
    • 78. Subsets
    • 347. Top K Frequent Elements
    • 647. Palindromic Substrings
    • 230. Kth Smallest Element in a BST
    • 238. Product of Array Except Self
    • 1143. Longest Common Subsequence
    • 48. Rotate Image
    • 49. Group Anagrams
    • 39. Combination Sum
    • 454. 4Sum II
    • 62. Unique Paths
    • 378. Kth Smallest Element in a Sorted Matrix
    • 64. Minimum Path Sum
    • 102. Binary Tree Level Order Traversal
    • 289. Game of Life
    • 145. Binary Tree Postorder Traversal
    • 287. Find the Duplicate Number
    • 215. Kth Largest Element in an Array
    • 328. Odd Even Linked List
    • 875. Koko Eating Bananas
    • 384. Shuffle an Array
    • 341. Flatten Nested List Iterator
    • 96. Unique Binary Search Trees
    • 11. Container With Most Water
    • 337. House Robber III
    • 394. Decode String
    • 371. Sum of Two Integers
    • 621. Task Scheduler
    • 208. Implement Trie (Prefix Tree)
    • 114. Flatten Binary Tree to Linked List
    • 105. Construct Binary Tree from Preorder and Inorder Traversal
    • 75. Sort Colors
    • 131. Palindrome Partitioning
    • 103. Binary Tree Zigzag Level Order Traversal
    • 36. Valid Sudoku
    • 17. Letter Combinations of a Phone Number
    • 309. Best Time to Buy and Sell Stock with Cooldown
    • 279. Perfect Squares
    • 380. Insert Delete GetRandom O(1)
    • 116. Populating Next Right Pointers in Each Node
    • 236. Lowest Common Ancestor of a Binary Tree
    • 200. Number of Islands
    • 437. Path Sum III
    • 416. Partition Equal Subset Sum
    • 1049. Last Stone Weight II
    • 494. Target Sum
    • 16. 3Sum Closest
    • 148. Sort List
    • 207. Course Schedule
    • 560. Subarray Sum Equals K
    • 438. Find All Anagrams in a String
    • 300. Longest Increasing Subsequence
    • 240. Search a 2D Matrix II
    • 162. Find Peak Element
    • 73. Set Matrix Zeroes
    • 134. Gas Station
    • 139. Word Break
    • 210. Course Schedule II
    • 395. Longest Substring with At Least K Repeating Characters
    • 787. Cheapest Flights Within K Stops
    • 56. Merge Intervals
    • 334. Increasing Triplet Subsequence
    • 713. Subarray Product Less Than K
    • 142. Linked List Cycle II
    • 221. Maximal Square
    • 138. Copy List with Random Pointer
    • 227. Basic Calculator II
    • 6. ZigZag Conversion
    • 150. Evaluate Reverse Polish Notation
    • 34. Find First and Last Position of Element in Sorted Array
    • 322. Coin Change
    • 79. Word Search
    • 19.Remove Nth Node From End of List
    • 33. Search in Rotated Sorted Array
    • 63. Unique Paths II
    • 146. LRU Cache
    • 2. Add Two Numbers
    • 54. Spiral Matrix
    • 55. Jump Game
    • 50. Pow(x, n)
    • 3. Longest Substring Without Repeating Characters
    • 152. Maximum Product Subarray
    • 5. Longest Palindromic Substring
    • 179. Largest Number
    • 324. Wiggle Sort II
    • 127. Word Ladder
    • 91. Decode Ways
    • 15. 3Sum
    • 98. Validate Binary Search Tree
    • 130. Surrounded Regions
    • 8. String to Integer (atoi)
    • 29. Divide Two Integers
    • 166. Fraction to Recurring Decimal
    • 72. Edit Distance
    • 295. Find Median from Data Stream
    • 123. Best Time to Buy and Sell Stock III
    • 829. Consecutive Numbers Sum
    • 31. Next Permutation
    • 173. Binary Search Tree Iterator
    • 92. Reverse Linked List II
    • 95. Unique Binary Search Trees II
    • 24. Swap Nodes in Pairs
    • 209. Minimum Size Subarray Sum
    • 199. Binary Tree Right Side View
    • 120. Triangle
    • 188. Best Time to Buy and Sell Stock IV
    • 442. Find All Duplicates in an Array
    • 222. Count Complete Tree Nodes
    • 47. Permutations II
    • 109. Convert Sorted List to Binary Search Tree
    • 18. 4Sum
    • 153. Find Minimum in Rotated Sorted Array
    • 654. Maximum Binary Tree
    • 695. Max Area of Island
    • 547. Friend Circles
    • 43. Multiply Strings
    • 310. Minimum Height Trees
    • 516. Longest Palindromic Subsequence
    • 241. Different Ways to Add Parentheses
    • 863. All Nodes Distance K in Binary Tree
    • 143. Reorder List
    • 402. Remove K Digits
    • 450. Delete Node in a BST
  • Algorithms & Data Structure
    • Sorting
  • Leetcode SQL
Powered by GitBook
On this page
  • Problem
  • Solution

Was this helpful?

  1. Leetcode

134. Gas Station

https://leetcode.com/problems/gas-station/

Problem

There are N gas stations along a circular route, where the amount of gas at station i is gas[i].

You have a car with an unlimited gas tank and it costs cost[i] of gas to travel from station i to its next station (i+1). You begin the journey with an empty tank at one of the gas stations.

Return the starting gas station's index if you can travel around the circuit once in the clockwise direction, otherwise return -1.

Note:

  • If there exists a solution, it is guaranteed to be unique.

  • Both input arrays are non-empty and have the same length.

  • Each element in the input arrays is a non-negative integer.

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 unit 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 unit 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 unit of gas but you only have 3.
Therefore, you can't travel around the circuit once no matter where you start.

Solution

class Solution {
public:
    int canCompleteCircuit(vector<int>& gas, vector<int>& cost) {
        int totalgas = 0;
        for (int i = 0; i < gas.size(); ++i) {
            totalgas += gas[i] - cost[i];
        }
        if (totalgas < 0) return -1;
        totalgas = 0;
        int idx = 0;
        for (int i = 0; i < gas.size(); ++i) {
            if (totalgas < 0) {
                totalgas = 0;
                idx = i;
            }
            totalgas += gas[i] - cost[i];
        }
        return idx;
    }
};
Previous73. Set Matrix ZeroesNext139. Word Break

Last updated 4 years ago

Was this helpful?