diff --git a/252/252.md b/252/252.md new file mode 100644 index 0000000..01d54ce --- /dev/null +++ b/252/252.md @@ -0,0 +1,60 @@ +ここに書いてあるコードはLeetCodeの実行環境上で試せてないので動かないコードがあったら教えてください。 +(一応LLMに聞いて想定通り動くだろうという回答があったコードではあります) + +## 何も見ずに解いてみる + +```cpp +class Solution { +public: + bool canAttendMeetings(vector>& intervals) { + vector> points; + for (vector& interval : intervals) { + points.emplace_back(interval[0], true); + points.emplace_back(interval[1], false); + } + sort(points.begin(), points.end()); + bool attending = false; + for (pair& point : points) { + bool is_start = point.second; + if (is_start && attending) { + return false; + } + attending = is_start; + } + return true; + } +}; +``` + +## 他の人のコードを見てみる + +https://github.com/tokuhirat/LeetCode/pull/55/files +https://github.com/olsen-blue/Arai60/pull/56/files +https://github.com/ryosuketc/leetcode_arai60/pull/55/files +https://github.com/Ryotaro25/leetcode_first60/pull/60/files + +自分のコードでもペアを入れるのではなくmapで実装すればもう少し見通しが良くなったかも。 +pairのsortがfirstとsecondの辞書順になっていて、さらにtrue > falseであるというのが前提になっているのが良くないかも。 +せめてコメントがないとわかりにくいような気がする。 + +std::vectorに対するstd::sortは要素を始めから見ていって辞書順に並べ替えるらしい。 +(1要素目が同じだったら2要素目、2要素目が同じだったら3要素目・・・みたいな感じ) + +## 最終コード + +sortで中身変えちゃうので値渡しにしました + +```cpp +class Solution { +public: + bool canAttendMeetings(vector> intervals) { + sort(intervals.begin(), intervals.end()); + for (int i = 1; i < intervals.size(); ++i) { + if (intervals[i][0] < intervals[i-1][1]) { + return false; + } + } + return true; + } +}; +```