Conversation
| # @lc code=start | ||
| class Solution: | ||
| def canFinish(self, numCourses: int, prerequisites: List[List[int]]) -> bool: | ||
| constraint_map, num_of_constraint_map = dict(), dict() |
There was a problem hiding this comment.
コードの読みやすさの観点からは、わざわざ 2 つの変数を同時に代入するメリットはないように思います。ただし、 2 つの変数をスワップする場合は、 2 つの変数を同時に代入する書き方のほうが分かりやすいと思います。
There was a problem hiding this comment.
コメントありがとうございます。たしかにそうですね、「なんとなくまとめられそうだから」でこのようにしていましたが、ただの代入はそれぞれで実行するようにしようと思います。
| class Solution: | ||
| def canFinish(self, numCourses: int, prerequisites: List[List[int]]) -> bool: | ||
| postrequisites_of_courses = [[] for _ in range(numCourses)] | ||
| indegree_of_courses = [0 for _ in range(numCourses)] |
There was a problem hiding this comment.
グラフ理論の単語と問題文中の単語が混ざっており、違和感を感じました。 num_prerequisites_of_courses はいかがでしょうか?
There was a problem hiding this comment.
コメントありがとうございます。indegree はグラフ理論の用語なんですね、1単語で言いたいことを表せるのでいいかなと思いましたが、たしかにコード全体としての一貫性に欠けていそうです。ご提案いただいた num_prerequisites_of_courses を採用させてもらおうと思います。
| # | ||
|
|
||
| # @lc code=start | ||
| class Solution: |
There was a problem hiding this comment.
こちらに書いてある深さ優先探索版を想定していました。
https://ja.wikipedia.org/wiki/%E3%83%88%E3%83%9D%E3%83%AD%E3%82%B8%E3%82%AB%E3%83%AB%E3%82%BD%E3%83%BC%E3%83%88
こちらのやり方で書いてみていただけますか?
There was a problem hiding this comment.
すみません、勘違いしていました。ちょっとリンクを参考に書き直してみます。
コメントありがとうございます。今日少し考えて書いてみて、Step3 としてアップロードしました。所感は PR の Description に書いてみました。 |
|
b52ec72 で再帰を使った DFS のコードを書いてみました。step1, 2 で実装した方法しかもともと知らなかったので理解に時間がかかりました。step3 のコードは Solutions を見たので、明日何も見ずに書けるまで繰り返そうと思います。 |
|
Approve ありがとうございます。今日改めて何も見ずに書いてみたところ、初回はだめでしたが2回目以降はエラーなく3回連続でできました。この PR はマージします。 |
Problem
Description
O(V+E)、空間計算量:O(V+E)※ V = numCourses, E = len(prerequisites)numCoursesと一致すれば True(一致しない場合は Dead Lock が起きているため False)if course not in constraint_map:を書いていなかったpostrequisites_of_courses[i]は「course_i の事後にしか受講できない courses」を意味しているつもりStep1 の段階で15分以内で解けているので SkipNote