码农知识堂 - 1000bd
  •   Python
  •   PHP
  •   JS/TS
  •   JAVA
  •   C/C++
  •   C#
  •   GO
  •   Kotlin
  •   Swift
  • LeetCode 2349. 设计数字容器系统(SortedSet)


    文章目录

      • 1. 题目
      • 2. 解题

    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 次。
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19
    • 20

    来源:力扣(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
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19
    • 20
    • 21
    • 22

    992 ms 55.6 MB Python3


    我的CSDN博客地址 https://michael.blog.csdn.net/

    长按或扫码关注我的公众号(Michael阿明),一起加油、一起学习进步!
    Michael阿明

  • 相关阅读:
    基于SpringCloudalibaba+SSM+Mybatisplus实现在线教育讲师管理后端
    Security源码学习
    代码随想录算法训练营第五十五天| LeetCode392. 判断子序列、LeetCode115. 不同的子序列
    手把手教你springboot集成mybatis
    基于ssm的课程思政资源众包系统的设计与实现毕业设计源码020838
    【软考 系统架构设计师】数据库系统③ 数据库设计过程
    msvcr100.dll丢失怎样修复,msvcr100.dll丢失怎么解决(最新方法分享)
    leetcode: 122. 买卖股票的最佳时机II
    [python]十九、进程、线程和协程
    ppt怎么压缩到10m以内?分享ppt缩小方法
  • 原文地址:https://blog.csdn.net/qq_21201267/article/details/126070776
  • 最新文章
  • 攻防演习之三天拿下官网站群
    数据安全治理学习——前期安全规划和安全管理体系建设
    企业安全 | 企业内一次钓鱼演练准备过程
    内网渗透测试 | Kerberos协议及其部分攻击手法
    0day的产生 | 不懂代码的"代码审计"
    安装scrcpy-client模块av模块异常,环境问题解决方案
    leetcode hot100【LeetCode 279. 完全平方数】java实现
    OpenWrt下安装Mosquitto
    AnatoMask论文汇总
    【AI日记】24.11.01 LangChain、openai api和github copilot
  • 热门文章
  • 十款代码表白小特效 一个比一个浪漫 赶紧收藏起来吧!!!
    奉劝各位学弟学妹们,该打造你的技术影响力了!
    五年了,我在 CSDN 的两个一百万。
    Java俄罗斯方块,老程序员花了一个周末,连接中学年代!
    面试官都震惊,你这网络基础可以啊!
    你真的会用百度吗?我不信 — 那些不为人知的搜索引擎语法
    心情不好的时候,用 Python 画棵樱花树送给自己吧
    通宵一晚做出来的一款类似CS的第一人称射击游戏Demo!原来做游戏也不是很难,连憨憨学妹都学会了!
    13 万字 C 语言从入门到精通保姆级教程2021 年版
    10行代码集2000张美女图,Python爬虫120例,再上征途
Copyright © 2022 侵权请联系2656653265@qq.com    京ICP备2022015340号-1
正则表达式工具 cron表达式工具 密码生成工具

京公网安备 11010502049817号