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
|
# 3408. Design Task Manager
import heapq
class TaskManager(object):
def __init__(self, tasks):
"""
:type tasks: List[List[int]]
"""
self.heap = []
self.task_priority = {}
self.task_owner = {}
for i in tasks:
self.add(i[0], i[1], i[2])
def add(self, userId, taskId, priority):
"""
:type userId: int
:type taskId: int
:type priority: int
:rtype: None
"""
heapq.heappush(self.heap, (-priority, -taskId))
self.task_priority[taskId] = priority
self.task_owner[taskId] = userId
def edit(self, taskId, newPriority):
"""
:type taskId: int
:type newPriority: int
:rtype: None
"""
heapq.heappush(self.heap, (-newPriority, -taskId))
self.task_priority[taskId] = newPriority
def rmv(self, taskId):
"""
:type taskId: int
:rtype: None
"""
self.task_priority[taskId] = -1
def execTop(self):
"""
:rtype: int
"""
while self.heap:
neg_priority, neg_task_id = heapq.heappop(self.heap)
priority = -neg_priority
task_id = -neg_task_id
if self.task_priority.get(task_id, -2) == priority:
self.task_priority[task_id] = -1
return self.task_owner.get(task_id, -1)
return -1
if __name__ == "__main__":
obj = TaskManager(tasks=[[1, 101, 10], [2, 102, 20], [3, 103, 15]])
obj.add(4, 104, 5)
obj.edit(102, 8)
print(obj.execTop())
obj.rmv(101)
obj.add(5, 105, 15)
print(obj.execTop())
|