当前位置:网站首页>LeetCode 2349. 设计数字容器系统(SortedSet)
LeetCode 2349. 设计数字容器系统(SortedSet)
2022-08-02 17:48:00 【Michael阿明】
1. 题目
设计一个数字容器系统,可以实现以下功能:
在系统中给定下标处 插入 或者 替换 一个数字。
返回 系统中 给定数字 的最小下标。
请你实现一个 NumberContainers
类:
NumberContainers()
初始化数字容器系统。void change(int index, int number)
在下标 index 处填入 number 。如果该下标 index 处已经有数字了,那么用 number 替换该数字。int find(int number)
返回给定数字 number 在系统中的最小下标。如果系统中没有 number ,那么返回 -1 。
示例:
输入:
["NumberContainers", "find", "change", "change", "change", "change", "find", "change", "find"]
[[], [10], [2, 10], [1, 10], [3, 10], [5, 10], [10], [1, 20], [10]]
输出:
[null, -1, null, null, null, null, 1, null, 2]
解释:
NumberContainers nc = new NumberContainers();
nc.find(10); // 没有数字 10 ,所以返回 -1 。
nc.change(2, 10); // 容器中下标为 2 处填入数字 10 。
nc.change(1, 10); // 容器中下标为 1 处填入数字 10 。
nc.change(3, 10); // 容器中下标为 3 处填入数字 10 。
nc.change(5, 10); // 容器中下标为 5 处填入数字 10 。
nc.find(10); // 数字 10 所在的下标为 1 ,2 ,3 和 5 。因为最小下标为 1 ,所以返回 1 。
nc.change(1, 20); // 容器中下标为 1 处填入数字 20 。注意,下标 1 处之前为 10 ,现在被替换为 20 。
nc.find(10); // 数字 10 所在下标为 2 ,3 和 5 。最小下标为 2 ,所以返回 2 。
提示:
1 <= index, number <= 10^9
调用 change 和 find 的 总次数 不超过 10^5 次。
来源:力扣(LeetCode)
链接:https://leetcode.cn/problems/design-a-number-container-system
著作权归领扣网络所有。商业转载请联系官方授权,非商业转载请注明出处。
2. 解题
SortedSet
存储 index, 有序
from sortedcontainers import SortedSet
class NumberContainers:
def __init__(self):
self.idx2num = {
} # idx : num
self.num2idxlist = defaultdict(SortedSet)
# num : [idx ...]
def change(self, index: int, number: int) -> None:
if index in self.idx2num:
num = self.idx2num[index]
self.idx2num.pop(index)
self.num2idxlist[num].discard(index)
if len(self.num2idxlist[num]) == 0:
self.num2idxlist.pop(num)
self.num2idxlist[number].add(index)
self.idx2num[index] = number
def find(self, number: int) -> int:
if number in self.num2idxlist:
return self.num2idxlist[number][0]
return -1
992 ms 55.6 MB Python3
我的CSDN博客地址 https://michael.blog.csdn.net/
长按或扫码关注我的公众号(Michael阿明),一起加油、一起学习进步!
边栏推荐
猜你喜欢
每日优鲜倒了,叮咚买菜的春天在哪?
天翼云4.0来了!千城万池,无所不至!
Wechat Gymnasium Appointment Mini Program Graduation Design Finished Works (7) Mid-term Inspection Report
mui中使用多级选择器实现省市区联动
The days of patching are more difficult than the days of writing code
技术人生 | 如何画业务大图
来亲自手搭一个ResNet18网络
详细教学——1688关键词搜索API操作流程
redis summary_distributed cache
0725-面试记录
随机推荐
NeRF: The Secret of 3D Reconstruction Technology in the Popular Scientific Research Circle
我的递归从不爆栈
Wechat Gymnasium Appointment Mini Program Graduation Design Finished Works Mini Program Graduation Design Finished Work (6) Question Opening Reply PPT
Enterprise cloud cost control, are you really doing it right?
golang刷leetcode 经典(1) LRU缓存机制
解决多版本jar包冲突问题
织梦提示信息提示框美化
MySQL基本语法
Mysql和Redis如何保证数据一致性
HDF驱动框架的API(3)
ES: Promise的基本用法
IDEA相关配置(特别完整)看完此篇就将所有的IDEA的相关配置都配置好了、设置鼠标滚轮修改字体大小、设置鼠标悬浮提示、设置主题、设置窗体及菜单的字体及字体大小、设置编辑区主题、通过插件更换主题
golang刷leetcode滑动窗口(9) 颜色分类
阿波罗 planning代码-modules\planning\lattice\trajectory_generation\PiecewiseBrakingTrajectoryGenerator类详解
AI+医疗:使用神经网络进行医学影像识别分析
mysql四种隔离级别
如何确保智能工厂的安全?
golang刷leetcode动态规划(10)编辑距离
全面认识二极管,一篇文章就够了
本地MSE播放fragment mp4服务