leetcode-6113:无限集中的最小数字

简介: leetcode-6113:无限集中的最小数字

题目

题目连接

现有一个包含所有正整数的集合 [1, 2, 3, 4, 5, …] 。

实现 SmallestInfiniteSet 类:

  • SmallestInfiniteSet() 初始化 SmallestInfiniteSet 对象以包含 所有 正整数。
  • int popSmallest() 移除 并返回该无限集中的最小整数。
  • void addBack(int num) 如果正整数 num 不 存在于无限集中,则将一个 num 添加 到该无限集中。

示例:

输入
["SmallestInfiniteSet", "addBack", "popSmallest", "popSmallest", "popSmallest", "addBack", "popSmallest", "popSmallest", "popSmallest"]
[[], [2], [], [], [], [1], [], [], []]
输出
[null, null, 1, 2, 3, null, 1, 4, 5]
解释
SmallestInfiniteSet smallestInfiniteSet = new SmallestInfiniteSet();
smallestInfiniteSet.addBack(2);    // 2 已经在集合中,所以不做任何变更。
smallestInfiniteSet.popSmallest(); // 返回 1 ,因为 1 是最小的整数,并将其从集合中移除。
smallestInfiniteSet.popSmallest(); // 返回 2 ,并将其从集合中移除。
smallestInfiniteSet.popSmallest(); // 返回 3 ,并将其从集合中移除。
smallestInfiniteSet.addBack(1);    // 将 1 添加到该集合中。
smallestInfiniteSet.popSmallest(); // 返回 1 ,因为 1 在上一步中被添加到集合中,
                                   // 且 1 是最小的整数,并将其从集合中移除。
smallestInfiniteSet.popSmallest(); // 返回 4 ,并将其从集合中移除。
smallestInfiniteSet.popSmallest(); // 返回 5 ,并将其从集合中移除。

解题

方法一:有序集合作为补集

创建一个集合set,用于作为无限集合的补集,存储被移除的数。

  • 如果补集不是从1开始,那么就插入1
  • 如果补集从1开始,就找到第一个非连续的值
class SmallestInfiniteSet {
public:
    set<int> set;//存储去掉的
    SmallestInfiniteSet() {
    }
    int popSmallest() {
        auto it=set.begin();
        if(set.empty()||*it>1){
            set.insert(1);
            return 1;
        }else{
            int index=1;
            while(it!=set.end()){
                if(*it==index){
                    it++;
                    index++;
                }else{
                    set.insert(index);
                    return index;
                }
            }
            if(it==set.end()){
                set.insert(index);
                return index;
            }
        }
        return -1;
    }
    void addBack(int num) {
        if(set.count(num)){
            set.erase(num);
        }
    }
};
相关文章
|
Hadoop
使用ambari快速部署Hadoop集群
Ambari 自身也是一个分布式架构的软件,主要由两部分组成:Ambari Server 和 Ambari Agent。我们可以通过 Ambari Server 通知 Ambari Agent 安装对应的软件;甚至连Ambari Agent我们都可以在Web界面上来进行安装和部署。
3978 0
使用ambari快速部署Hadoop集群
|
4月前
|
运维 Cloud Native 应用服务中间件
阿里云微服务引擎 MSE 及 API 网关 2025 年 11 月产品动态
阿里云微服务引擎 MSE 面向业界主流开源微服务项目, 提供注册配置中心和分布式协调(原生支持 Nacos/ZooKeeper/Eureka )、云原生网关(原生支持Higress/Nginx/Envoy,遵循Ingress标准)、微服务治理(原生支持 Spring Cloud/Dubbo/Sentinel,遵循 OpenSergo 服务治理规范)能力。API 网关 (API Gateway),提供 APl 托管服务,覆盖设计、开发、测试、发布、售卖、运维监测、安全管控、下线等 API 生命周期阶段。帮助您快速构建以 API 为核心的系统架构.满足新技术引入、系统集成、业务中台等诸多场景需要。
阿里云微服务引擎 MSE 及 API 网关 2025 年 11 月产品动态
|
网络协议 C++ 数据格式
websocket协议介绍与基于reactor模型的websocket服务器实现
websocket协议介绍与基于reactor模型的websocket服务器实现
429 0
|
9月前
|
前端开发
如何在Rollup中配置Tree Shaking?
如何在Rollup中配置Tree Shaking?
331 55
|
算法 数据安全/隐私保护 计算机视觉
基于Retinex算法的图像去雾matlab仿真
本项目展示了基于Retinex算法的图像去雾技术。完整程序运行效果无水印,使用Matlab2022a开发。核心代码包含详细中文注释和操作步骤视频。Retinex理论由Edwin Land提出,旨在分离图像的光照和反射分量,增强图像对比度、颜色和细节,尤其在雾天条件下表现优异,有效解决图像去雾问题。
|
SQL 存储 Java
魔鬼在细节,润乾报表为什么开发效率更高
因为魔鬼在细节,润乾各种小细节都做的好,很多麻烦事一个选项就搞定,省去了一堆繁琐的操作,效率自然就高了
|
小程序 JavaScript 数据挖掘
ClkLog常见问题-指标定义与统计逻辑Sec.1
用户行为分析指标项是衡量产品和运营管理的关键因素,它们可以帮助企业深入了解用户需求、行为模式、产品表现等多个方面。 比如页面停留时间、平均停留时长可以分析用户的需求和兴趣;跳出率、留存率可以查询用户的体验情况;事件触发次数、转化率等可以评估业务流程是否顺畅或者营销策略是否成功。 这篇我们将完整介绍ClkLog的中使用到的指标项定义以及一些重点指标的统计逻辑,便于运营人员理解后做数据分析,同时如果大家在使用过程中发现了指标项为空或异常的情况,可以对照说明排查问题。
ClkLog常见问题-指标定义与统计逻辑Sec.1
|
运维 关系型数据库 MySQL
自建数据库迁移到云数据库RDS
本次课程由阿里云数据库团队的凡珂分享,主题为自建数据库迁移至云数据库RDS MySQL版。课程分为四部分:1) 传统数据库部署方案及痛点;2) 选择云数据库RDS MySQL的原因;3) 数据库迁移方案和产品选型;4) 线上活动与权益。通过对比自建数据库的局限性,介绍了RDS MySQL在可靠性、安全性、性价比等方面的优势,并详细讲解了使用DTS(数据传输服务)进行平滑迁移的步骤。此外,还提供了多种优惠活动信息,帮助用户降低成本并享受云数据库带来的便利。
423 6
|
存储 编解码 监控
射频(RF)中的频谱分析方法详解
射频(RF)中的频谱分析方法详解
849 4

热门文章

最新文章