From e37ba32fc15228c1954da6b0359648d1f12c52e3 Mon Sep 17 00:00:00 2001 From: tokuhirat <54652919+tokuhirat@users.noreply.github.com> Date: Tue, 19 Aug 2025 19:13:39 +0900 Subject: [PATCH] Create 252. Meeting Rooms.md --- 252. Meeting Rooms/252. Meeting Rooms.md | 57 ++++++++++++++++++++++++ 1 file changed, 57 insertions(+) create mode 100644 252. Meeting Rooms/252. Meeting Rooms.md diff --git a/252. Meeting Rooms/252. Meeting Rooms.md b/252. Meeting Rooms/252. Meeting Rooms.md new file mode 100644 index 0000000..3f5b9df --- /dev/null +++ b/252. Meeting Rooms/252. Meeting Rooms.md @@ -0,0 +1,57 @@ +# 252. Meeting Rooms +## STEP1 +- 何も見ずに解いてみる +- どこかでみたことがある。終了時刻が早い順に見ていき、それより早く開始する会議があれば参加できない。 +```python +class Solution: + def canAttendMeetings(self, intervals: List[List[int]]) -> bool: + sorted_intervals = sorted(intervals, key=lambda x: x[1]) + last_end = 0 + for start, end in sorted_intervals: + if start < last_end: + return False + last_end = end + return True +``` + +## STEP2 +### プルリクやドキュメントを参照 +- https://github.com/olsen-blue/Arai60/pull/56/files + - 各時刻について重複がないか累積和の考え方を使うコード。思いつかなかった。開始と終了を見れば十分なので自然かと言われると微妙なところだと思った。 + - 座標圧縮をすると入力が整数でない場合も対応できる。効率化も可能。 +- https://github.com/Mike0121/LeetCode/pull/27/files + - sort する際に終了時刻を基準にするか、開始時刻を基準にするかはどちらでも良いと思う。 +- https://github.com/hayashi-ay/leetcode/pull/59/files + - Heap も活用できる。途中で会議が追加される場合に優位性あり。 + - 下記コードは in-place で intervals をヒープにしている。 + https://docs.python.org/ja/3.13/library/heapq.html#heapq.heapify +```python +import heapq + + +class Solution: + def canAttendMeetings(self, intervals: List[List[int]]) -> bool: + heapq.heapify(intervals) + last_end = 0 + while intervals: + start, end = heapq.heappop(intervals) + if start < last_end: + return False + last_end = end + return True +``` +## STEP3 +### 3回ミスなく書く +```python +class Solution: + def canAttendMeetings(self, intervals: List[List[int]]) -> bool: + intervals = sorted(intervals) + last_end = 0 + for start, end in intervals: + if last_end > start: + return False + last_end = end + return True +``` + +1分,1分,1分で3回Accept