Leetcode 3408. Design Task Manager

  • Leetcode 3408. Design Task Manager
    • 1. 解题思路
    • 2. 代码实现
  • 题目链接:3408. Design Task Manager

1. 解题思路

这一题的核心就是怎么去设计这个数据结构使得可以快速实现以下两个功能:

  • 快速地找到优先级最高的task
  • 如何通过taskid快速找到其对应的userid以及priority信息,并对其进行修改。

前者,我们可以通过一个有序队列对其进行存储和维护,后者,我们只需要对每一个taskid构造一个字典即可。

2. 代码实现

给出python代码实现如下:

class TaskManager:

    def __init__(self, tasks: List[List[int]]):
        self.tasks = {}
        self.queue = []
        for userId, taskId, priority in tasks:
            self.add(userId, taskId, priority)
        return

    def add(self, userId: int, taskId: int, priority: int) -> None:
        self.tasks[taskId] = (userId, priority)
        bisect.insort(self.queue, (priority, taskId, userId))
        return

    def edit(self, taskId: int, newPriority: int) -> None:
        userId, priority = self.tasks[taskId]
        self.rmv(taskId)
        self.add(userId, taskId, newPriority)
        return

    def rmv(self, taskId: int) -> None:
        userId, priority = self.tasks[taskId]
        self.queue.pop(bisect.bisect_left(self.queue, (priority, taskId, userId)))
        self.tasks.pop(taskId)
        return

    def execTop(self) -> int:
        if self.queue == []:
            return -1
        priority, taskId, userId = self.queue.pop()
        return userId


# Your TaskManager object will be instantiated and called as such:
# obj = TaskManager(tasks)
# obj.add(userId,taskId,priority)
# obj.edit(taskId,newPriority)
# obj.rmv(taskId)
# param_4 = obj.execTop()

提交代码评测得到:耗时2135ms,占用内存108.4MB。


http://www.niftyadmin.cn/n/5817282.html

相关文章

QTcpSocket 中设置接收缓冲区大小

在 QTcpSocket 中设置接收缓冲区大小 使用setSocketOption方法 在QTcpSocket类中,可以使用setSocketOption函数来设置接收缓冲区大小。具体来说,对于 TCP 套接字,你可以使用QAbstractSocket::ReceiveBufferSizeSocketOption选项。以下是一个简…

探寻健康养生之道,点亮生活之光

在当今这个忙碌喧嚣的时代,健康养生犹如一座明亮的灯塔,为我们指引着通往高品质生活的方向。它承载着人们对活力充沛、身心和谐的美好向往。 谈及饮食养生,那可是健康的根基。秉持 “五谷为养,五果为助,五畜为益&…

CASL的RBAC用户权限控制实现指南

简介 CASL是一个强大的权限控制库,可以帮助我们实现灵活的RBAC(基于角色的访问控制)系统。本文将介绍如何使用CASL实现用户权限管理。 CASL的核心概念 1. Ability(能力) import { AbilityBuilder, Ability } from casl/abilityconst abil…

Ungoogled Chromium127 编译指南 MacOS篇(七)- 安装依赖包

1. 引言 在获取了 Ungoogled Chromium 的源代码之后,我们需要安装所有必要的依赖包。这些依赖包对于成功编译 Chromium 至关重要。本文将指导您完成所有必需软件包的安装。 2. 依赖包安装 2.1 使用 Homebrew 安装基础依赖 # 安装 Ninja 构建系统 brew install n…

用Cline打造你的智能搜索助手:Tavily Search MCP集成指南

引言 本文将详细介绍如何在Cline编辑器中集成Tavily Search智能搜索功能。我们将从MCP(Model Context Protocol)协议基础开始,深入探讨Tavily Search MCP服务器的安装配置、使用方法,以及进阶的二次开发技巧。无论你是AI开发者还…

2012mfc,自绘列表控件

原文 使用常用控件版本4.70中的自定义绘画功能自定义列表控件的外观. 介绍 常见控件的4.70版引入了一项叫自定义绘画的功能. 可按轻量易用的自画版本对待自定义绘画.易用性来自,即只需处理一条消息(NM_CUSTOMDRAW),且你可让窗口为你干活,因此你不必完成物主绘画中的所有粗活…

《探秘MiniGPT-4:开启AI多模态新纪元》

《探秘MiniGPT-4:开启AI多模态新纪元》 一、MiniGPT-4 登场,AI 变革进行时?二、初窥 MiniGPT-4 究竟何物三、拆解 MiniGPT-4 技术架构(一)视觉编码器:洞察图像奥秘(二)语言模型&…

在 CentOS 上安装 Docker 和 Docker Compose(可指定版本或安装最新版本)

文章目录 一、安装 Docker1.1 安装最新版本的 Docker1.2 安装指定版本的 Docker 二、配置 Docker 镜像加速器(国内镜像源)三、安装 Docker Compose3.1 安装最新版本的 Docker Compose3.2 安装指定版本的 Docker Compose 四、卸载 Docker 和 Docker Compo…