aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--design_task_manager.py64
1 files changed, 64 insertions, 0 deletions
diff --git a/design_task_manager.py b/design_task_manager.py
new file mode 100644
index 0000000..11e4c3a
--- /dev/null
+++ b/design_task_manager.py
@@ -0,0 +1,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())