📣 独立日限时特惠: VIP通行证立减$68
123
返回列表 发新帖
楼主: 匿名
跳转到指定楼层
上一主题 下一主题
收起左侧

勾勾店面

全局:
ooio 发表于 2020-07-26 23:03:37
我觉得这个思路是对的,对每次生成的数字n,检查n-1和n+1是否存在,如果存在则说明n与之相连;对于一个连续的序列,只把序列长度保存在首尾即可,不必update序列中间的值,所以是O(1)的复杂度。根
谢谢分享思路,但是这个答案好像会造成内存泄露。因为这样内存可能无限扩大。是不是要优化一下删除不需要的key
回复

使用道具 举报

🔗
ooio 2020-7-28 00:38:45 | 只看该作者
全局:
tczhaodachuan 发表于 2020-7-27 19:49
谢谢分享思路,但是这个答案好像会造成内存泄露。因为这样内存可能无限扩大。是不是要优化一下删除不需要 ...

这个不算是内存泄露吧,应该是空间复杂度为O(N),N为next()调用的次数(也是generateNumber调用的次数)。
如果删除不需要的key,就不会是O(1)。同时,那些key也都是需要的,来判断generatedNumber是不是已经存在。
回复

使用道具 举报

全局:
不就是union find吗,每次有新数字n,让n和n+1/n - 1 union起来, 然后看size[start number]

评分

参与人数 1大米 +1 收起 理由
djmiss + 1 我也觉得是union find

查看全部评分

回复

使用道具 举报

地里匿名用户
🔗
匿名用户-ZHHHJ  2020-7-28 06:07:18
泡利不相容 发表于 2020-7-28 05:48
不就是union find吗,每次有新数字n,让n和n+1/n - 1 union起来, 然后看size[start number]

有什么O(1)的方法算size of group with startNum 吗?
回复

使用道具 举报

🔗
djmiss 2020-7-30 21:36:55 | 只看该作者
全局:
djewssw 发表于 2020-7-25 02:50
没必要用map存interval,只要把当前的startNum和比startNum大的数存到一个set里面就行了。每次执行Next的时 ...

假如startNum = 1
set里面有连续的2-10w,那么next()就需要一直startNum++ 直到10w才能返回?
回复

使用道具 举报

🔗
djmiss 2020-7-30 21:39:06 | 只看该作者
全局:
泡利不相容 发表于 2020-7-28 05:48
不就是union find吗,每次有新数字n,让n和n+1/n - 1 union起来, 然后看size[start n ...
我也觉得是union find
回复

使用道具 举报

🔗
djewssw 2020-7-31 00:11:40 | 只看该作者
全局:
djmiss 发表于 2020-7-30 21:36
假如startNum = 1
set里面有连续的2-10w,那么next()就需要一直startNum++ 直到10w才能返回?

这跟之前提到的ArrayList扩容一样。假如你有一个长度10万的ArrayList,插入下一个的时候正好满了需要扩容。这时候需要移动10万个元素,但是它的amortized cost仍然是O(1)
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 注册账号
隐私提醒:
  • ☑ 禁止发布广告,拉群,贴个人联系方式:找人请去🔗同学同事飞友,拉群请去🔗拉群结伴,广告请去🔗跳蚤市场,和 🔗租房广告|找室友
  • ☑ 论坛内容在发帖 30 分钟内可以编辑,过后则不能删帖。为防止被骚扰甚至人肉,不要公开留微信等联系方式,如有需求请以论坛私信方式发送。
  • ☑ 干货版块可免费使用 🔗超级匿名:面经(美国面经、中国面经、数科面经、PM面经),抖包袱(美国、中国)和录取汇报、定位选校版
  • ☑ 查阅全站 🔗各种匿名方法

本版积分规则

>
快速回复 返回顶部 返回列表