当前位置:网站首页>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阿明),一起加油、一起学习进步!
边栏推荐
猜你喜欢
动力电池扩产潮,宁德时代遭围剿
Mini Program Graduation Works WeChat Gymnasium Reservation Mini Program Graduation Design Finished Product (8) Graduation Design Thesis Template
织梦自定义表单添加全选和全不选功能按钮
小程序毕设作品之微信体育馆预约小程序毕业设计成品(8)毕业设计论文模板
载20(S)-人参皂苷/细胞穿膜肽-单克隆抗体-载丝裂霉素白蛋白纳米微球的制备
技术人生 | 如何设定业务目标
Cpolar application example of data acquisition equipment
罗敏背后是抖音
分布式 | dble 启动的时候做了什么之配置检测
打补丁的日子,比写代码的日子难熬多了
随机推荐
redis summary_distributed cache
脉脉上的相亲生意
究极异常处理逻辑——多层次异常的处理顺序
vulnhub W34kn3ss: 1
天翼云4.0分布式云赋能千行百业数字化转型
golang源码分析(33)pollFD
55.【sort函数的升序降序】
动力电池扩产潮,宁德时代遭围剿
MySQL命令(命令行方式,而非图形界面方式)
HDF驱动框架的API(3)
【21天学习挑战赛学习打卡】顺序查找
记一次 .NET 某工控自动化控制系统 卡死分析
解决多版本jar包冲突问题
织梦自定义表单添加全选和全不选功能按钮
mui中使用多级选择器实现省市区联动
Data Governance: The Evolution of Data Integration and Application Patterns
面试官:可以谈谈乐观锁和悲观锁吗
How a "cloud" can bring about new changes in the industry
Smart Microelectronics Releases Low-Power MM32L0130 Series MCU Products
小程序毕设作品之微信体育馆预约小程序毕业设计成品(7)中期检查报告