当前位置:网站首页>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阿明),一起加油、一起学习进步!
边栏推荐
- golang刷leetcode 字符串(4)逆波兰式
- 0725-面试记录
- C# 术语
- 在线文档Sheet技术解析
- redis summary_distributed cache
- 【21天学习挑战赛学习打卡】顺序查找
- 2022高压电工特种作业证考试题库及答案
- Playing in the cloud | The key technology of Tianyi cloud object storage ZOS high availability is revealed
- Local broadcast MSE fragments mp4 service
- Several common cross-domain solutions
猜你喜欢
随机推荐
天翼云4.0分布式云赋能千行百业数字化转型
Mysql和Redis如何保证数据一致性
golang刷leetcode滑动窗口(9) 颜色分类
土巴兔IPO五次折戟,互联网家装未解“中介”之痛
透过案例看清API接口的作用——演示1688商品详情接口
2021年下半年软件设计师上午真题
搭建属于自己的知识库(Wikijs)
如何应对机器身份带来的安全风险
MySQL命令(命令行方式,而非图形界面方式)
白话电子签章原理及风险
Dream weaving prompt information prompt box beautification
SQL 正则解析手机号码提供商
What is the difference between erp system and wms system
Code Inspection for DevOps
如何确保智能工厂的安全?
今年上半年,我国公路建设总体形势持续向好
docker安装Oracle之后常用的一些命令
千万级QPS下服务如何才能平滑启动
二舅“反转”了?
Five keys to a successful Industrial IoT deployment




![Open Source Summer | [Cloud Native] DevOps (5): Integrating Harbor](/img/db/16ae82217382e72824a4b454060833.png)




