当前位置:网站首页>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阿明),一起加油、一起学习进步!
边栏推荐
猜你喜欢

AI+医疗:使用神经网络进行医学影像识别分析

故障分析 | 一条 SELECT 语句跑崩了 MySQL ,怎么回事?

Security First: Tools You Need to Know to Implement DevSecOps Best Practices

在线文档Sheet技术解析

详细教学——1688关键词搜索API操作流程

多聚体/壳聚糖修饰白蛋白纳米球/mPEG-HSA聚乙二醇人血清白蛋白纳米球的制备与研究

E-Surfing Cloud 4.0 Distributed Cloud Enables Digital Transformation of Thousands of Industries

MySQL表的约束

Wechat Gymnasium Appointment Mini Program Graduation Design Finished Work (5) Task Book

MySQL基本语法
随机推荐
golang刷leetcode 经典(5)设计哈希集合
Security First: Tools You Need to Know to Implement DevSecOps Best Practices
2022安全员-C证考试题库模拟考试平台操作
golang刷leetcode 经典(3) 设计推特
Simulink脚本自动创建Autosar Parameter Port及Mapping
golang源码分析(19)简单编译器-计算器
golang刷leetcode动态规划(10)编辑距离
golang刷leetcode 字符串(4)逆波兰式
MySQL基本语法
MySQL命令(命令行方式,而非图形界面方式)
What is the difference between erp system and wms system
一朵“云“如何带来产业新变革
Mysql和Redis如何保证数据一致性
vulnhub W34kn3ss: 1
Cpolar application example of data acquisition equipment
全面认识二极管,一篇文章就够了
【21天学习挑战赛学习打卡】顺序查找
记一次 .NET 某工控自动化控制系统 卡死分析
成功部署工业物联网的五个关键
NeRF:火爆科研圈的三维重建技术大揭秘