本文主要是介绍【算法思路记录】力扣2336,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!
Problem: 2336. 无限集中的最小数字
"""
既然要求无限集,那么就不能存储拥有的数字,要考虑被移除的数字
既然不能存储拥有的数字,要获得最小整数就不能用优先队列进行。那么,可以记录被移除的数字,最小整数从1开始,如果最小整数位于被删除的数字内,则不对其进行移除操作。popSmallest方法移除最小整数,这也是唯一一个移除整数的方法。
addBack会使得最小整数产生变化,添加回来的数字可能会成为最小数字"""class SmallestInfiniteSet:def __init__(self):self.rm = set()self.min_num = 1def popSmallest(self) -> int:res = self.min_numself.rm.add(res) # 最小数字被删除# 寻找下一个没有移除的最小数字while self.min_num in self.rm:self.min_num += 1return resdef addBack(self, num: int) -> None:# 如果新加入的数字小于当前最小数字,则更新最小数字if num < self.min_num:self.min_num = num# 将加回来的数字从被移除的名单中去除self.rm.discard(num)# Your SmallestInfiniteSet object will be instantiated and called as such:
# obj = SmallestInfiniteSet()
# param_1 = obj.popSmallest()
# obj.addBack(num)
这篇关于【算法思路记录】力扣2336的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!