forked from DaleStudy/leetcode-study
-
Notifications
You must be signed in to change notification settings - Fork 0
/
Copy pathEgonD3V.py
66 lines (49 loc) ยท 1.96 KB
/
EgonD3V.py
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
from typing import List
from unittest import TestCase, main
# Definition of Interval:
class Interval(object):
def __init__(self, start, end):
self.start = start
self.end = end
class Solution:
def canAttendMeetings(self, intervals: List[Interval]) -> bool:
return self.solve_sort_stack(intervals)
"""
LintCode ๋ก๊ทธ์ธ์ด ์๋์ด์ hhttps://neetcode.io/problems/meeting-schedule ์์ ์คํ์ํค๊ณ ํต๊ณผ๋ง ํ์ธํ์ต๋๋ค.
Runtime: ? ms (Beats ?%)
Time Complexity: O(n log n)
- intervals ์ ๋ ฌ์ O(n log n)
- intervals ์กฐํํ๋ฉฐ stack์ ๋ง์ง๋ง ๊ฐ์ end์ ํ์ฌ interval์ start๋ฅผ ๋น๊ตํ๋๋ฐ O(n)
> O(n log n) + O(n) ~= O(n log n)
Memory: ? MB (Beats ?%)
Space Complexity: O(n)
- intervals ๋ฉ๋ชจ๋ฆฌ๋ฅผ ๊ทธ๋๋ก ์ฌ์ฉํ๋ฉด์ ์ ๋ ฌํ์ผ๋ฏ๋ก O(1)
- stack์ ํฌ๊ธฐ๋ ์ต๋ intervals์ ๊ฐ์์ง ์ ์์ผ๋ฏ๋ก O(n)
"""
def solve_sort_stack(self, intervals: List[Interval]) -> bool:
intervals.sort(key=lambda x: x.start)
stack: List[Interval] = []
for interval in intervals:
if not stack:
stack.append(interval)
continue
if stack[-1].end > interval.start:
return False
else:
stack.append(interval)
return True
class _LeetCodeTestCases(TestCase):
def test_1(self):
intervals = [Interval(0,30), Interval(5,10), Interval(15,20)]
output = False
self.assertEqual(Solution().canAttendMeetings(intervals), output)
def test_2(self):
intervals = [Interval(5, 8), Interval(9,15)]
output = False
self.assertEqual(Solution().canAttendMeetings(intervals), output)
def test_3(self):
intervals = [Interval(0, 1), Interval(1, 2)]
output = False
self.assertEqual(Solution().canAttendMeetings(intervals), output)
if __name__ == '__main__':
main()