スポンサーリンク

【LeetCode】134. Gas Station 解答・解説【Python】

スポンサーリンク
スポンサーリンク
この記事は約5分で読めます。

 

はじめに

LeetCodeの問題を解答します。

なるべく、問題の和訳と詳細なコメントを書いています。

余裕があれば、複数のアプローチの解答と、実際の面接を想定して英語での解法やコメントを書いています。

 

これまでこのサイトでメモしてきた問題はこのページに全て載せています。

LeetCode 解答・解説記事一覧

 

二分探索、連結リストなど、テーマを絞って集中的に解きたい方は以下の記事が有用です。

LeeetCodeの問題をアルゴリズムとデータ構造による分類しました。

 

また、LeetCodeではAtcoderと違ってクラスと関数を定義して解答します。

LeetCodeに特有の内容など、知っておくと役に立つかもしれないことをまとめています。

はじめてLeetCodeに触れる方はこちらの記事も役に立つと思います。

解答前に知っておくと役に立つかもしれない情報

 

 

詳細

 

問題

 

原文

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:

Example 2:

 

Constraints:

  • n == gas.length == cost.length
  • 1 <= n <= 105
  • 0 <= gas[i], cost[i] <= 104

 

 

内容(和訳)

n個のガスステーションが円状に並んでいます。i番目のガスステーションはgas[i]の値の燃料があります。

容量が無限の車を持っており、配列costのi番目の要素から次の要素へ行くには、cost[i]の値の燃料が必要です。あなたは燃料が空の状態でどれかのガスステーションから旅を始めます。

2つの配列gas,costが与えられます。もし、燃料切れを起こさずに一周できた場合は、スタート地点のインデックスを返してください。できない場合は-1を返してください。一周できる場合は解がただ一つであることが保証されます。

 

※正しくない可能性があります。

 

考察

・ガスステーションの数はn個なので、O(n^2)の時間計算量を要する方法では時間切れとなります。

・gasの合計がcostの合計より大きい場合は、必ず一周できるものとしてスタート地点を決める方法が思いつきます。

 

 

解答

 

解答1:Python

 

初めに、gasの合計とcostの合計を比較しています。

costの合計の方がgasの合計よりも大きい場合、-1を返します。

※合計を比較するのは思いついたものの、costの合計の方が大きい場合に常に1周できないことを証明する方法があるのかが気になる。

 

下段のfor文ではスタート地点を決めます。

startはスタート地点を示すインデックス、fuelは残りの燃料。

現在の燃料に、i番目の給油量とi番目からi+1番目へ行くための消費量の差を加えます。

もし、燃料が0を下回ったらスタート地点をi+1番目に進め、残燃料を0にリセットします。

燃料が尽きない限りstart(スタート地点)は変わらないので、for文が終わればstartを返します。

 

解答2:Python, brute force, time limit exceeded

こちらは、時間切れになった解答です。

時間計算量:O(n^2)、空間計算量:O(n)になります。

i番目の給油量と消費量が0よりも大きい場合のガスステーションを集め、1つずつ一周できるかを確認する方法です。

brute forceで考えてみたかったので、一応メモとして書き残しておきます。

 

 

 

終わりに

補足・参考・感想

 

問題を分類しました。テーマごとに集中して問題を解くことができます。

LeeetCodeの問題をアルゴリズムとデータ構造による分類

 

LeetCodeに特有の内容など、知っておくと役に立つかもしれないことをまとめました。

解答前に知っておくと役に立つかもしれない情報

 

 

他の問題もどうぞ

 

前:45. Jump Game II

 

次:

 

LeetCode 解答・解説記事一覧

 

コメント