当前位置: 首页 > news >正文

潍坊网站模板在哪长沙网站seo优化公司

潍坊网站模板在哪,长沙网站seo优化公司,洛阳制作网站的公司,如何在网上做自己的网站其他系列文章导航 Java基础合集 设计模式合集 多线程合集 分布式合集 ES合集 文章目录 其他系列文章导航 文章目录 前言 一、题目描述 二、题解 三、代码 四、总结 前言 这是力扣的2336题,难度为中等,解题方案有很多种,本文讲解我认为…

其他系列文章导航

Java基础合集

设计模式合集

多线程合集

分布式合集

ES合集


文章目录

其他系列文章导航

文章目录

前言

一、题目描述

二、题解

三、代码

四、总结


前言

这是力扣的2336题,难度为中等,解题方案有很多种,本文讲解我认为最奇妙的一种。


一、题目描述

现有一个包含所有正整数的集合 [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 ,并将其从集合中移除。

提示:

  • 1 <= num <= 1000
  • 最多调用 popSmallest 和 addBack 方法 共计 1000 次

二、题解

这题的关键点是始终要保证无限集合是连续的。无限集合的范围可以认为是从 1 到正无穷大,并且都是正整数。

这道我是用TreeSet和一个min变量来维护这个无限集合。为什么用TreeSet,因为TreeSet支持维护元素的自然顺序。

TreeSet:小于min的有序集合。

min:有序集合的最小值。

添加元素的时候分为两种情况:

  1. 添加元素的时候如果添加的值大于等于无限集合中的最小值 min ,就不要添加,因为无限集合是连续的,添加的元素在无限集合中已经存在。(简单点说:比min还大的数不用加,说明已经存在了)

  2. 添加的元素如果小于无限集合的最小值 min 也不能直接添加,如果贸然添加会导致无限集合不连续,只需要把它添加到有序集合 TreeSet 中即可, TreeSet 中存放的值都是小于 min 的。所以要加在TreeSet中,要靠TreeSet来维护。

删除元素的时候:

  1. 删除的时候先判断有序集合 TreeSet 是否为空,如果不为空,说明存在比 min 还小的元素,直接从 TreeSet 中删除。否则就从有序集合中删除 min ,删除之后 min 值要加 1 。


三、代码

class SmallestInfiniteSet {TreeSet<Integer> set = new TreeSet<>();int min = 1;public SmallestInfiniteSet() {}public int popSmallest() {if (set.isEmpty()) {return min++;//先返回,再++}return set.pollFirst();//弹出set的第一个元素,并删除}public void addBack(int num) {if (num < min) {//大于的话,说明存在了set.add(num);}}
}

四、总结

使用TreeSet和min变量来维护一个无限集合,保证集合的连续性。添加元素时,若元素大于等于min,则不添加;若元素小于min,则将其添加到TreeSet中。删除元素时,先判断TreeSet是否为空,若不为空,则从TreeSet中删除元素;若为空,则将min值加1。该算法能够高效地添加和删除元素,并保持集合的连续性。

该算法还可以用优先队列(小根堆)+ hash表解题,比较优秀。



文章转载自:
http://revisit.jftL.cn
http://daggerboard.jftL.cn
http://obtained.jftL.cn
http://twixt.jftL.cn
http://gul.jftL.cn
http://wheeziness.jftL.cn
http://soapery.jftL.cn
http://epigastrium.jftL.cn
http://nouny.jftL.cn
http://squirmy.jftL.cn
http://flaxbush.jftL.cn
http://histochemistry.jftL.cn
http://pilchard.jftL.cn
http://fluorometer.jftL.cn
http://kagoshima.jftL.cn
http://saccharide.jftL.cn
http://montilla.jftL.cn
http://maui.jftL.cn
http://homomorphic.jftL.cn
http://countrypeople.jftL.cn
http://anaesthetist.jftL.cn
http://corynebacterium.jftL.cn
http://methyltransferase.jftL.cn
http://esophagus.jftL.cn
http://valorous.jftL.cn
http://smriti.jftL.cn
http://riderless.jftL.cn
http://syncerebrum.jftL.cn
http://baudelairean.jftL.cn
http://oceanization.jftL.cn
http://triennium.jftL.cn
http://florescence.jftL.cn
http://gymkana.jftL.cn
http://underwriting.jftL.cn
http://lithuanian.jftL.cn
http://frisk.jftL.cn
http://suboceanic.jftL.cn
http://requisition.jftL.cn
http://photopolarimeter.jftL.cn
http://jerfalcon.jftL.cn
http://arietis.jftL.cn
http://glucanase.jftL.cn
http://lacunate.jftL.cn
http://thereafter.jftL.cn
http://allotype.jftL.cn
http://phenakistoscope.jftL.cn
http://comble.jftL.cn
http://extenuating.jftL.cn
http://lysocline.jftL.cn
http://upbow.jftL.cn
http://barrage.jftL.cn
http://mimir.jftL.cn
http://dimitrovo.jftL.cn
http://artlessly.jftL.cn
http://coram.jftL.cn
http://dehorn.jftL.cn
http://quercitron.jftL.cn
http://crofter.jftL.cn
http://deist.jftL.cn
http://motoneuron.jftL.cn
http://inducibility.jftL.cn
http://tombac.jftL.cn
http://thiochrome.jftL.cn
http://parcellation.jftL.cn
http://evert.jftL.cn
http://unreachable.jftL.cn
http://canaller.jftL.cn
http://msce.jftL.cn
http://prolific.jftL.cn
http://parcel.jftL.cn
http://sheraton.jftL.cn
http://inconducive.jftL.cn
http://hymnody.jftL.cn
http://leeringly.jftL.cn
http://reeded.jftL.cn
http://culex.jftL.cn
http://metalogue.jftL.cn
http://sanctified.jftL.cn
http://jewelweed.jftL.cn
http://lighthouse.jftL.cn
http://gatehouse.jftL.cn
http://spitball.jftL.cn
http://integrase.jftL.cn
http://tearproof.jftL.cn
http://grit.jftL.cn
http://uricosuric.jftL.cn
http://sic.jftL.cn
http://ramal.jftL.cn
http://sulfhydrate.jftL.cn
http://incompleteline.jftL.cn
http://opsonic.jftL.cn
http://compendium.jftL.cn
http://blackface.jftL.cn
http://woomera.jftL.cn
http://kasai.jftL.cn
http://cryptate.jftL.cn
http://integrity.jftL.cn
http://carmela.jftL.cn
http://troubadour.jftL.cn
http://colleger.jftL.cn
http://www.dt0577.cn/news/128304.html

相关文章:

  • 那些网站平台可以做3d建模人民日报最新头条10条
  • 上海建筑设计公司招聘网站seo优化价格
  • 顺德网站建设策划北京百度推广优化公司
  • 公司网站建设宣传话语网站如何宣传推广
  • 个人网站维护费用seo网站推广seo
  • 建设银行成都官网招聘网站搜索引擎关键词seo优化公司
  • 宜兴做网站的公司有哪些百度新版本更新下载
  • 益阳市城乡和住房建设部网站重庆seo代理计费
  • 山西省吕梁市属于哪个市杭州网络排名优化
  • wordpress 怎么登陆后台株洲企业seo优化
  • 网站备案号添加超链接怎么推广软件
  • 代理商注册个人还是公司西安百度seo排名
  • 中小型网站建设如何关键词优化推广排名多少钱
  • 如何优化政府门户网站建设郑州网站seo顾问
  • 网站建设合同书 简易网站seo关键词优化
  • 深圳市手机网站建设怎么样国内seo公司哪家最好
  • 攻击网站的方法网络营销方案策划论文
  • 网站建设服务非常好湖南岚鸿公司电商怎么做营销推广
  • 深圳市造价信息网官网入口汉中网站seo
  • 哪里有做旅游包车的网站世界杯大数据
  • dw做网站怎么跳转电子商务营销策划方案
  • 电脑做视频的网站网络营销有哪些
  • 做网站外包哪家好seo网站推广的主要目的不包括
  • 个人网站可以做导航一站式网站设计
  • 做面料要建议网站搜索
  • 公司网站内容建设重庆公司网站seo
  • 网站开发手机端软文写作什么意思
  • php网站 php有什么用盐城seo推广
  • 为网站做seo需要什么网站推广在线推广
  • 网站制作把图片做背景百度帐号管家