【每日一题】无限集中的最小数字

news2024/11/27 1:24:51

文章目录

  • Tag
  • 题目来源
  • 题目解读
  • 解题思路
    • 方法一:有限集合
    • 方法二:有序集合
  • 写在最后

Tag

【有序集合】【2023-11-29】


题目来源

2336. 无限集中的最小数字


题目解读

设计一个类实现移除无限集中的最小整数以及向该无限集中增加一个原集合中不存在的整数。


解题思路

方法一:有限集合

因为题目中提示的 1 <= num <= 1000,并且两个方法的调用次数共计最多 1000 次,于是可以维护一个容纳整数 1-1000 的有序集合,popSmallest 直接返回 *s.begin()addBack 直接将 num 插入集合。

实现代码

class SmallestInfiniteSet {
public:
    set<int> s;
    SmallestInfiniteSet() {
        s.clear();
        for(int i = 1; i <= 1010; ++i) {
            s.insert(i);
        }
    }
    
    int popSmallest() {
        int x = *s.begin();
        s.erase(s.begin());
        return x;
    }
    
    void addBack(int num) {
        s.insert(num);
    }
};

复杂度分析

时间复杂度:初始化的时间复杂度为 O ( n ) O(n) O(n) n = 1000 n = 1000 n=1000popSmallestaddBack 的时间复杂度为 O ( l o g n ) O(logn) O(logn)

空间复杂度: O ( n ) O(n) O(n)

方法二:有序集合

方法一中使用的其实是有限集合,因为题目提示的数据范围比较小,我们直接将所有数据存入到到有序集合中,一旦数据规模大,该方法就会失效。现在使用一种真正的有限集合来解决本题。

由于一开始的集合中包含所有从 1 开始的正整数,并且操作要么是增加任意的正整数,要么是删除最小的正整数,因此在任意时刻,会有一个 threshold,使得所有大于等于 threshold 的正整数均在集合中。并且这个 threshold 不会很大,不会超过 k+1,因为最多调用 kpopSmallest,并且每次的调用操作都是移除集合中最小的整数。

于是可以维护一个有序集合 s 保存所有小于 threshold 的正整数,用 threshold 表示所有大于等于 threshold 的正整数:

  • popSmallest 中,如果 s 为空时,表明当前没有小于 threshold 的整数,直接返回 threshold++threshold;否则直接移除并返回集合 s 中的最小元素;
  • addBack 中,如果 num 大于等于 threshold,则不进行任何操作,否则将其加入到 s 中。

实现代码

class SmallestInfiniteSet {
private:
    set<int> s;
    int threshold = 1;
public:
    SmallestInfiniteSet() {
    }
    
    int popSmallest() {
        if (s.empty()) {
            int res = threshold;
            ++threshold;
            return res;
        }
        int res = *s.begin();
        s.erase(s.begin());
        return res;
    }
    
    void addBack(int num) {
        if (num < threshold) {
            s.insert(num);
        }
    }
};

复杂度分析

时间复杂度:初始化的时间复杂度为 O ( 1 ) O(1) O(1)popSmallestaddBack 的时间复杂度为 O ( l o g n ) O(logn) O(logn) n n n 为当前集合 s 中的元素个数。

空间复杂度: O ( n ) O(n) O(n)


写在最后

如果文章内容有任何错误或者您对文章有任何疑问,欢迎私信博主或者在评论区指出 💬💬💬。

如果大家有更优的时间、空间复杂度方法,欢迎评论区交流。

最后,感谢您的阅读,如果感到有所收获的话可以给博主点一个 👍 哦。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/1267218.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

【JavaEE初阶】 HTTP响应报文

文章目录 &#x1f332;序言&#x1f38d;200 OK&#x1f340;404 Not Found&#x1f384;403 Forbidden&#x1f334;405 Method Not Allowed&#x1f38b;500 Internal Server Error&#x1f333;504 Gateway Timeout&#x1f332;302 Move temporarily&#x1f38d;301 Move…

vs2012切换版本后WebUI项目加载失败,右键重新加载提示已经在解决方案中打开了具有该名称的项目

问题描述 vs2012切换版本后&#xff0c;回到主版本web项目加载失败&#xff0c;右键重新加载提示已经在解决方案中打开了具有该名称的项目 解决办法 打开根目录.csproj文件&#xff0c;找到第一个ProectTypeGuides节点&#xff0c;删除掉。然后关闭vs,重新打开此项目即可。这…

rust-flexi_logger

flexi_logger 是字节开源的rust日志库。目前有log4rs、env_log 等库&#xff0c;综合比较下来&#xff0c;还是flexi_logger简单容易上手&#xff0c;而且自定义很方便&#xff0c;以及在效率方面感觉也会高&#xff0c;下篇文章我们来测试下。 下面来看下怎么使用 关注 vx gol…

bugku题解记录2

文章目录 哥哥的秘密黄道十二官where is flag一段新闻 哥哥的秘密 给出了一个qq&#xff0c;那就去看看呗 hint里面说 收集空间信息——相册——收集微博信息——相册——解题——相册——提交flag 那看看空间先 盲文&#xff1a; hint&#xff1a;密码时地人 旗帜存在相册里…

Nature子刊最新研究:Hi-C宏基因组揭示土壤-噬菌体-宿主相互作用

土壤中有大量的噬菌体。然而&#xff0c;大多数宿主未知&#xff0c;无法获得其基因组特征。2023年11月23日&#xff0c;最新发表于《Nature communications》期刊题为“Hi-C metagenome sequencing reveals soil phage–host interactions”的文章&#xff0c;通过高通量染色体…

京东数据产品推荐-京东数据挖掘-京东平台2023年10月滑雪装备销售数据分析

如今&#xff0c;滑雪正成为新一代年轻人的新兴娱乐方式&#xff0c;借助北京冬奥会带来的发展机遇&#xff0c;我国冰雪经济已逐渐实现从小众竞技运动到大众时尚生活方式的升级。由此也带动滑雪相关生意的增长&#xff0c;从滑雪服靴到周边设备&#xff0c;样样都需要消费者掏…

基于Eclipse+SDK+ADT+DDMS的安卓开发环境完整搭建过程

基于EclipseSDKADTDDMS的安卓开发环境完整搭建过程 1 基本概念2 SDK安装3 Eclipse安装4 ADT插件安装4.1 在线安装&#xff08;太慢不建议选择&#xff09;4.2 离线安装&#xff08;建议选择&#xff09; 5 配置SDK6 集成安装7 创建安卓虚拟设备8 创建并启动安卓虚拟机8 关于DDM…

Zemax光学设计——单透镜设计

单透镜系统参数&#xff1a; 入瞳直径&#xff1a;20mm F/#&#xff08;F数&#xff09;&#xff1a;10 全视场&#xff1a;10 波长&#xff1a;587nm 材料&#xff1a;BK7 优化方向&#xff1a;最佳均方根光斑直径 设计步骤 一、单透镜系统参数 步骤一&#xff1a;入…

45、Flink 的指标体系介绍及验证(2)-指标的scope、报告、系统指标以及追踪、api集成示例和dashboard集成

Flink 系列文章 1、Flink 部署、概念介绍、source、transformation、sink使用示例、四大基石介绍和示例等系列综合文章链接 13、Flink 的table api与sql的基本概念、通用api介绍及入门示例 14、Flink 的table api与sql之数据类型: 内置数据类型以及它们的属性 15、Flink 的ta…

【傻瓜级JS-DLL-WINCC-PLC交互】7.​C#直连PLC并读取PLC数据

思路 JS-DLL-WINCC-PLC之间进行交互&#xff0c;思路&#xff0c;先用Visual Studio创建一个C#的DLL控件&#xff0c;然后这个控件里面嵌入浏览器组件&#xff0c;实现JS与DLL通信&#xff0c;然后DLL放入到WINCC里面的图形编辑器中&#xff0c;实现DLL与WINCC的通信。然后PLC与…

有理有据:数据库选择集中式还是分布式

OLTP类型的业务系统采用集中式数据库还是分布式数据库是在做国产数据库改造中经常被问到的问题&#xff0c;无论是对技术架构发展演变&#xff0c;还是对现有业务长期发展提供必要的支撑&#xff0c;这个问题都具有讨论意义。在分布式大行其道的背景下&#xff0c;似乎任何架构…

三年后重启港股IPO,卷出国门后的宁德时代实力几何?

近些年&#xff0c;国内的新能源汽车发展如火如荼&#xff0c;与之紧密相关的动力电池企业也搭上了发展的高速列车。经过初期的扩产潮后&#xff0c;国内动力电池行业目前产能过剩的风险正在逐渐加剧。 国内的头部企业为了减轻库存压力&#xff0c;在新一轮的竞争与洗牌周期中…

【C++】STL --- 哈希

哈希 一、 unordered 系列关联式容器1. unordered系列关联式容器2. unordered_map3. unordered_set 二、底层结构1. 哈希概念2. 哈希冲突3. 哈希函数4. 解决哈希冲突&#xff08;1&#xff09;闭散列&#xff08;2&#xff09;开散列 三、封装哈希表1. 模板参数列表的改造2. 迭…

【带头学C++】----- 八、C++面向对象编程 ---- 8.8 内联函数 inline

目录 8.8 内联函数 inline 8.8.1 声明内联函数 8.8.2 宏函数与内联函数的区别 8.8.3 使用内联函数需注意 8.9 函数重载 8.9.1 什么是函数重载 8.9.2 函数重载的条件 8.9.3 函数重载底层原理是如何实现的&#xff1f; 8.8 内联函数 inline 在C中&#xff0c;inline是一个…

单片机_RTOS_架构

一. RTOS的概念 // 经典单片机程序 void main() {while (1){喂一口饭();回一个信息();} } ------------------------------------------------------ // RTOS程序 喂饭() {while (1){喂一口饭();} }回信息() {while (1){回一个信息();} }void main() {create_task(喂饭);cr…

leetcode 611. 有效三角形的个数(优质解法)

代码&#xff1a; class Solution {public int triangleNumber(int[] nums) {Arrays.sort(nums);int lengthnums.length;int n0; //三元组的个数//c 代表三角形最长的那条边for (int clength-1;c>2;c--){int left0;int rightc-1;while (left<right){if(nums[left]nums[r…

生成式AI与预测式AI的主要区别与实际应用

近年来&#xff0c;预测式人工智能&#xff08;Predictive AI&#xff09;通过先进的推荐算法、风险评估模型、以及欺诈检测工具&#xff0c;一直在推高着该领域公司的投资回报率。然而&#xff0c;今年初突然杀出的生成式人工智能&#xff08;Generative AI&#xff09;突然成…

数据库其它调优策略

文章目录 1. 优化MySQL服务器2. 优化数据库结构2.1 差分表&#xff1a;冷热数据分离 3. 大表优化3.1 读/写分离3.2 垂直拆分3.3 水平拆分 1. 优化MySQL服务器 电商平台&#xff0c;双十一&#xff0c;CPU使用率达到99%&#xff0c;系统的计算资源已经耗尽&#xff0c;再也无法…

【springboot】Spring 官方抛弃了 Java 8!新idea如何创建java8项目

解决idea至少创建jdk17项目 问题idea现在只能创建最少jdk17&#xff0c;不能创建java8了吗?解决 问题 idea现在只能创建最少jdk17&#xff0c;不能创建java8了吗? 我本来以为是 IDEA 版本更新导致的 Bug&#xff0c;开始还没在意。 直到我今天自己初始化项目时才发现&…

基于Java SSM框架+Vue实现垃圾分类网站系统项目【项目源码+论文说明】计算机毕业设计

基于java的SSM框架Vue实现垃圾分类网站系统演示 摘要 本论文主要论述了如何使用JAVA语言开发一个垃圾分类网站 &#xff0c;本系统将严格按照软件开发流程进行各个阶段的工作&#xff0c;采用B/S架构&#xff0c;面向对象编程思想进行项目开发。在引言中&#xff0c;作者将论述…