3408. Design Task Manager
UnknownView on LeetCode
Problem Overview
Design Task Manager (Unknown) asks you to solve a structured algorithmic task. This is a common Hash Table / Design pattern in coding interviews. Priority queue ordered by (priority, taskId); HashMap for O(1) access and removal.
A full step-by-step explanation is being added. See the study guide for pattern-based practice.
Approach
Priority queue ordered by (priority, taskId); HashMap for O(1) access and removal.
Related patterns: Hash Table, Design, Heap (Priority Queue)
3408.cs
C#
// Approach: Priority queue ordered by (priority, taskId); HashMap for O(1) access and removal.
// Time: O(log n) per op Space: O(n)
class Task : IComparable<Task>
{
public int UserId { get; set; }
public int TaskId { get; set; }
public int Priority { get; set; }
public Task() { }
public Task(int userId, int taskId, int priority)
{
UserId = userId;
TaskId = taskId;
Priority = priority;
}
public int CompareTo(Task other)
{
return this.Priority == other.Priority ? other.TaskId.CompareTo(this.TaskId)
: other.Priority.CompareTo(this.Priority);
}
}
class TaskManager
{
private Dictionary<int, Task> taskMap = new Dictionary<int, Task>(); // {taskId: Task}
private SortedSet<Task> taskSet; // Stores tasks sorted by priority and taskId.
public TaskManager(IList<IList<int>> tasks)
{
taskSet = new SortedSet<Task>();
foreach (var task in tasks)
Add(task[0], task[1], task[2]);
}
public void Add(int userId, int taskId, int priority)
{
Task task = new Task(userId, taskId, priority);
taskMap[taskId] = task;
taskSet.Add(task);
}
public void Edit(int taskId, int newPriority)
{
if (taskMap.TryGetValue(taskId, out Task task))
{
taskSet.Remove(task);
Task editedTask = new Task(task.UserId, taskId, newPriority);
taskSet.Add(editedTask);
taskMap[taskId] = editedTask;
}
}
public void Rmv(int taskId)
{
if (taskMap.TryGetValue(taskId, out Task task))
{
taskSet.Remove(task);
taskMap.Remove(taskId);
}
}
public int ExecTop()
{
if (taskSet.Count == 0)
return -1;
Task task = taskSet.Min;
taskSet.Remove(task);
taskMap.Remove(task.TaskId);
return task.UserId;
}
}Was this solution helpful?