LeetCode 1172. 餐盘栈(栈 + set)

1. 题目

我们把无限数量 ∞ 的栈排成一行,按从左到右的次序从 0 开始编号。每个栈的的最大容量 capacity 都相同。

实现一个叫「餐盘」的类 DinnerPlates:

  • DinnerPlates(int capacity) - 给出栈的最大容量 capacity。
  • void push(int val) - 将给出的正整数 val 推入 从左往右第一个 没有满的栈。
  • int pop() - 返回 从右往左第一个 非空栈顶部的值,并将其从栈中删除;如果所有的栈都是空的,请返回 -1。
  • int popAtStack(int index) - 返回编号 index 的栈顶部的值,并将其从栈中删除;如果编号 index 的栈是空的,请返回 -1。
示例:
输入: 
["DinnerPlates","push","push","push","push","push","popAtStack","push","push",
"popAtStack","popAtStack","pop","pop","pop","pop","pop"]
[[2],[1],[2],[3],[4],[5],[0],[20],[21],[0],[2],[],[],[],[],[]]
输出:
[null,null,null,null,null,null,2,null,null,20,21,5,4,3,1,-1]解释:
DinnerPlates D = DinnerPlates(2);  // 初始化,栈最大容量 capacity = 2
D.push(1);
D.push(2);
D.push(3);
D.push(4);
D.push(5);         // 栈的现状为:    2  41  3  5﹈ ﹈ ﹈
D.popAtStack(0);   // 返回 2。栈的现状为:      41  3  5﹈ ﹈ ﹈
D.push(20);        // 栈的现状为:  20  41  3  5﹈ ﹈ ﹈
D.push(21);        // 栈的现状为:  20  4 211  3  5﹈ ﹈ ﹈
D.popAtStack(0);   // 返回 20。栈的现状为:       4 211  3  5﹈ ﹈ ﹈
D.popAtStack(2);   // 返回 21。栈的现状为:       41  3  5﹈ ﹈ ﹈ 
D.pop()            // 返回 5。栈的现状为:        41  3 ﹈ ﹈  
D.pop()            // 返回 4。栈的现状为:    1  3 ﹈ ﹈   
D.pop()            // 返回 3。栈的现状为:    1 ﹈   
D.pop()            // 返回 1。现在没有栈。
D.pop()            // 返回 -1。仍然没有栈。提示:
1 <= capacity <= 20000
1 <= val <= 20000
0 <= index <= 100000
最多会对 push,pop,和 popAtStack 进行 200000 次调用。

来源:力扣(LeetCode)
链接:https://leetcode-cn.com/problems/dinner-plate-stacks
著作权归领扣网络所有。商业转载请联系官方授权,非商业转载请注明出处。

2. 解题

  • 暴力法,按题意进行逐个搜索,超时
class STK//自定义栈
{
public:int size;int capacity;vector<int> data;STK(int cap):size(0), capacity(cap) { data.resize(cap);}bool isEmpty() const { return size == 0;}bool isFull() const { return capacity == size;}void push(int val){if(!isFull())data[size++] = val;}int pop(){if(isEmpty())return -1;return data[--size];}
};
class DinnerPlates {int cap;vector<STK> v;
public:DinnerPlates(int capacity) {cap = capacity;}void push(int val) {int i = 0;while(i < v.size() && v[i].isFull())i++;if(i < v.size())v[i].push(val);else{v.push_back(STK(cap));v[i].push(val);}}int pop() {int i = v.size()-1;while(i >= 0 && v[i].isEmpty())i--;if(i < 0)return -1;int tp = v[i].pop();return tp;}int popAtStack(int index) {if(v.empty() || index >= v.size())return -1;return v[index].pop();}
};

在这里插入图片描述

  • 改进:增加两个set , set 有序
set<int> s1;//存储没有满的栈的id
set<int> s2;//存储不为空的栈的id
  • s1 的 begin() 就是可以 push 的 id
  • s2 的 end()-- 就是可以 pop 的 id,记得同时维护这两个 set
class STK//自定义栈
{
public:int size;int capacity;vector<int> data;STK(int cap):size(0), capacity(cap) { data.resize(cap);}bool isEmpty() const { return size == 0;}bool isFull() const { return capacity == size;}void push(int val){if(!isFull())data[size++] = val;}int pop(){if(isEmpty())return -1;return data[--size];}
};
class DinnerPlates {int cap;vector<STK> v;set<int> s1;//存储没有满的栈的idset<int> s2;//存储不为空的栈的idint tp;
public:DinnerPlates(int capacity) {cap = capacity;}void push(int val) {if(!s1.empty()){v[*s1.begin()].push(val);s2.insert(*s1.begin());if(v[*s1.begin()].isFull())s1.erase(s1.begin());}else//所有的栈都满了{v.push_back(STK(cap));v[v.size()-1].push(val);s2.insert(v.size()-1);if(cap != 1)s1.insert(v.size()-1);}}int pop() {if(s2.empty())//栈全部为空return -1;tp = v[*(--s2.end())].pop();s1.insert(*(--s2.end()));if(v[*(--s2.end())].isEmpty())s2.erase(*(--s2.end()));return tp;}int popAtStack(int index) {if(v.empty() || index >= v.size())return -1;tp = v[index].pop();if(v[index].isEmpty())s2.erase(index);s1.insert(index);return tp;}
};

在这里插入图片描述

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

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

相关文章

Hive SQL的编译过程

Hive是基于Hadoop的一个数据仓库系统&#xff0c;在各大公司都有广泛的应用。美团数据仓库也是基于Hive搭建&#xff0c;每天执行近万次的Hive ETL计算流程&#xff0c;负责每天数百GB的数据存储和分析。Hive的稳定性和性能对我们的数据分析非常关键。 在几次升级Hive的过程中&…

Prompt tuning新工作,五个参数解决下游任务 fine-tuning

文 | 小伟编 | 小轶前言自从Google石破天惊地发布Bert以来&#xff0c;NLP就进入了预训练语言模型的时代。众所周知&#xff0c;我们可以用预训练语言模型来学习各种各样的任务&#xff0c;即使它们的特征空间有比较大的差异。那么预训练语言模型为什么会有这种泛化能力呢&…

会议交流 | 如何将图谱实体与关系更好的向量化,并基于推理扩充知识边界?——DataFun Summit2022知识图谱在线峰会...

背景介绍知识图谱是对人类先验知识的概括&#xff0c;具有重要的学术价值和广泛的应用前景。在深度学习广泛应用环境下&#xff0c;知识图谱的表示学习通过将图谱实体和关系向量化&#xff0c;便于利用深度学习技术实现异质信息融合&#xff1b;同时&#xff0c;基于这种图谱表…

【思考】PHP——成也Web,败也Web

背景 早年我并不知道Python写的Web应用是怎么部署的&#xff0c;总觉得像PHP、ASP一样&#xff0c;仅仅提供一个语言级别的执行模块&#xff0c;直接嵌入Web服务器运行&#xff0c;甚至于直接对外提供带扩展名的URL都是自然而然的事情。 前一阵学习了Python&#xff0c;总是如别…

真正的高阶特征交叉:xDeepFM与DCN-V2

文 | 水哥源 | 知乎Saying1. xDeepFM和DCN-V2是真正的高阶交叉&#xff0c;和前面讲的High Order Factorization Machine&#xff08;HOFM&#xff09;又有着千丝万缕的联系。某种简化下&#xff0c;都能退化为HOFM的形式2. 如图3. 推荐模型迭代的时候要平衡涨点和复杂度的关系…

学术会议 | 中国杭州举办——第21届国际语义网大会​ISWC2022 Call for Papers

中国杭州举办&#xff01;ISWC2022 Call for Papers.ISWC(International Semantic Web Conference)是语义网和知识图谱领域的国际顶级学术会议&#xff0c;2022年10月23-27日&#xff0c;ISWC将在中国杭州举行&#xff0c;通过线上线下结合的方式&#xff0c;汇聚全世界相关的科…

LeetCode 82. 删除排序链表中的重复元素 II(链表)

1. 题目 给定一个排序链表&#xff0c;删除所有含有重复数字的节点&#xff0c;只保留原始链表中 没有重复出现 的数字。 示例 1: 输入: 1->2->3->3->4->4->5 输出: 1->2->5示例 2: 输入: 1->1->1->2->3 输出: 2->3来源&#xff1a;力…

从 ACL’22 投稿情况,速览当下 NLP 研究热点!

文 | Yimin_饭煲编 | 小轶卖萌屋的作者们&#xff0c;最近可真是忙秃了头~&#xff0c;不仅要苦哈哈地赶 ACL 2022 提前了两个月的Deadline&#xff0c;还要尽心尽力为读者们提供高质量的内容。如果大家心疼卖萌屋的作者们的话&#xff0c;还请多多一键三连:)ACL2022 全部转向了…

YUI事件体系之Y.EventTarget

上两篇文章YUI事件体系之Y.Do、YUI事件体系之Y.CustomEvent中&#xff0c;分别介绍了YUI实现AOP的Y.Do对象&#xff0c;以及建立自定义事件机制的Y.CustomEvent对象。 本篇文章&#xff0c;将要介绍YUI事件体系集大成者、最为精华的部分——Y.EventTarget。 Y.EventTarget DOM事…

开源开放 | DeepKE发布新版本:支持低资源、长篇章、多任务的图谱抽取开源框架(浙江大学)...

OpenKG地址&#xff1a;http://openkg.cn/tool/deepkeGitHub地址&#xff1a;https://github.com/zjunlp/deepkeGitee地址&#xff1a;https://gitee.com/openkg/deepkeDeepKE网站&#xff1a;http://deepke.zjukg.org/CN/index.html开放许可协议&#xff1a;GPL 3.0贡献者&…

LeetCode 478. 在圆内随机生成点(概率)

1. 题目 给定圆的半径和圆心的 x、y 坐标&#xff0c;写一个在圆中产生均匀随机点的函数 randPoint 。 说明: 输入值和输出值都将是浮点数。圆的半径和圆心的 x、y 坐标将作为参数传递给类的构造函数。圆周上的点也认为是在圆中。randPoint 返回一个包含随机点的x坐标和y坐标…

11月AI大事件回顾:GPT3开放使用/女娲视觉大模型/AE文艺复兴/...

编 | iven感谢提供本期内容的 ZenMoore、 jxyxiangyu、付瑶大家好&#xff5e; 11月的新闻速报来啦&#xff01;上个月不知道大家有没有忙着写文章&#xff0c;反正小编是这样的&#xff1a;好啦&#xff0c;让我们快来回顾上个月的 AI 大新闻吧&#xff01;学术进展何恺明 Mas…

开源开放 | 开源立体化漏洞情报知识图谱(四维创智)

OpenKG地址&#xff1a;http://openkg.cn/dataset/vuln-sprocket开放许可协议&#xff1a;CC BY-SA 4.0 &#xff08;署名相似共享&#xff09;贡献者&#xff1a;四维创智&#xff08;李德斌&#xff0c;孙基栩&#xff0c;鲍晨阳&#xff09;1. 前言随着时间的推移&#xff0…

LeetCode 515. 在每个树行中找最大值(层序遍历)

1. 题目 您需要在二叉树的每一行中找到最大的值。 示例&#xff1a; 输入: 1/ \3 2/ \ \ 5 3 9 输出: [1, 3, 9]来源&#xff1a;力扣&#xff08;LeetCode&#xff09; 链接&#xff1a;https://leetcode-cn.com/problems/find-largest-value-in-each-tree-row 著作…

YUI事件体系之Y.CustomEvent

上一篇文章中&#xff0c;简要介绍了YUI实现AOP的Y.Do对象。 接下来&#xff0c;我们继续对YUI事件体系进行探索。本次要介绍的是Y.CustomEvent对象&#xff0c;从命名上就可以看出&#xff0c;这个对象在整个YUI事件体系中十分重要。它建立起整个自定义事件的体系&#xff0c;…

GBDT是如何成为推荐系统顶级工具人的?

文 | 水哥源 | 知乎Saying1. 集成学习的ensemble注意一定要读作昂三姆包而不是印三姆包&#xff0c;一天一个算法工程师装x小技巧2. 区别bagging和boosting的准则是&#xff0c;先训练的模型对于后训练的模型是否有影响3. GBDT中&#xff0c;B&#xff08;boosting&#xff09;…

会议交流 | 如何提升推荐系统的可解释性?——DataFunSummit2022知识图谱在线峰会...

背景介绍知识图谱及特征学习结合智能推荐&#xff0c;可解决数据稀疏性及冷启动问题&#xff0c;更好的提升推荐决策场的准确性、多样性及可解释性&#xff0c;进而提升各个场景的推荐决策效率和体验。3月12日13:30-16:50&#xff0c;在DataFunSummit2022&#xff1a;知识图谱在…

LeetCode 143. 重排链表(链表反转+快慢指针)

1. 题目 给定一个单链表 L&#xff1a;L0→L1→…→Ln-1→Ln &#xff0c; 将其重新排列后变为&#xff1a; L0→Ln→L1→Ln-1→L2→Ln-2→… 你不能只是单纯的改变节点内部的值&#xff0c;而是需要实际的进行节点交换。 示例 1: 给定链表 1->2->3->4, 重新排列为…

YUI事件体系之Y.Do

YUI团队在种种场合不断的夸耀自己的事件体系是多么强大&#xff1a; YUI 3′s Event module is one of the strengths of the library –Eric Miraglia, YUI Theater — Luke Smith: “Events Evolved”YUI 3 is not all about DOM manipulation — it also contains a robust …

论文浅尝 | 采用成对编码的图卷积网络用于知识图谱补全

笔记整理&#xff1a;姚祯&#xff0c;浙江大学在读硕士&#xff0c;研究方向为知识图谱表示学习&#xff0c;图神经网络。论文引用&#xff1a;Liu S, Grau B, Horrocks I, et al. INDIGO: GNN-based inductive knowledge graph completion using pair-wise encoding[J]. Adva…