1
+ # Runtime: 182 ms (Top 65.24%) | Memory: 20.7 MB (Top 5.08%)
1
2
class ExamRoom :
2
3
3
4
def __init__ (self , n : int ):
@@ -9,20 +10,20 @@ def __init__(self, n: int):
9
10
def seat (self ) -> int :
10
11
start , end , distance = heapq .heappop (self .pq )
11
12
self .dict .pop (start , None ) #Remove old segment from dictionary
12
- self .dict .pop (end , None )
13
+ self .dict .pop (end , None )
13
14
14
- if start == end :
15
+ if start == end :
15
16
position = start
16
-
17
+
17
18
elif start == 0 :
18
19
position = start
19
20
right = self .addSegment (start + 1 , end )
20
-
21
+
21
22
elif end == self .N - 1 :
22
23
position = end
23
24
left = self .addSegment (start , end - 1 )
24
-
25
- elif end - start == 1 : #ONLY ONE PLACE TO PUT
25
+
26
+ elif end - start == 1 : #ONLY ONE PLACE TO PUT
26
27
position = start
27
28
left = self .addSegment (start + 1 , end )
28
29
@@ -32,34 +33,34 @@ def seat(self) -> int:
32
33
left = self .addSegment (position + 1 , end )
33
34
34
35
return position
35
-
36
+
36
37
def leave (self , p : int ) -> None :
37
38
left = self .dict .get (p - 1 , None )
38
39
right = self .dict .get (p + 1 , None )
39
-
40
+
40
41
new_start = new_end = p
41
-
42
+
42
43
if left :
43
44
self .removeSegment (left )
44
45
new_start = left .start
45
46
46
47
if right :
47
48
self .removeSegment (right )
48
49
new_end = right .end
49
-
50
+
50
51
self .addSegment (new_start , new_end )
51
52
52
53
def addSegment (self , start , end ):
53
54
segment = Segment (start , end , self .N )
54
55
self .dict [segment .start ] = segment
55
56
self .dict [segment .end ] = segment
56
57
heapq .heappush (self .pq , segment )
57
-
58
+
58
59
def removeSegment (self , segment ):
59
60
self .dict .pop (segment .start , None )
60
61
self .dict .pop (segment .end , None )
61
62
self .pq .remove (segment )
62
-
63
+
63
64
class Segment ():
64
65
def __init__ (self , start , end , N ):
65
66
self .start = start
@@ -77,7 +78,7 @@ def calculateDistance(self, start, end, N):
77
78
return end - start
78
79
79
80
else :
80
- return (end - start ) // 2
81
-
81
+ return (end - start ) // 2
82
+
82
83
def __iter__ (self ):
83
- return iter ((self .start , self .end , self .distance ))
84
+ return iter ((self .start , self .end , self .distance ))
0 commit comments