1. 题目

三合一。描述如何只用一个数组来实现三个栈。

你应该实现push(stackNum, value)、pop(stackNum)、isEmpty(stackNum)、peek(stackNum)方法。stackNum 表示栈下标,value 表示压入的值。

构造函数会传入一个stackSize参数,代表每个栈的大小。

示例1:输入:
["TripleInOne", "push", "push", "pop", "pop", "pop", "isEmpty"]
[[1], [0, 1], [0, 2], [0], [0], [0], [0]]输出:
[null, null, null, 1, -1, -1, true]
说明:当栈为空时`pop, peek`返回-1,当栈满时`push`不压入元素。示例2:输入:
["TripleInOne", "push", "push", "push", "pop", "pop", "pop", "peek"]
[[2], [0, 1], [0, 2], [0, 3], [0], [0], [0], [0]]输出:
[null, null, null, null, 2, 1, -1, -1]

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

2. 解题

class TripleInOne {int n, v;int size;vector<int> tail;//尾指针位置vector<int> stk;
public:TripleInOne(int stackSize) {n = stackSize;size = 3*stackSize;stk.resize(size);tail.resize(3);tail[0] = 0, tail[1] = stackSize, tail[2] = 2*stackSize;}void push(int stackNum, int value) {if(tail[stackNum] < (stackNum+1)*n ){stk[tail[stackNum]] = value;tail[stackNum]++;}}int pop(int stackNum) {if(tail[stackNum] == stackNum*n)return -1;v = stk[tail[stackNum]-1];tail[stackNum]--;return v;}int peek(int stackNum) {if(tail[stackNum] == stackNum*n)return -1;return stk[tail[stackNum]-1];}bool isEmpty(int stackNum) {return tail[stackNum]==stackNum*n;}
};

程序员面试金典 - 面试题 03.01. 三合一(数组栈)相关推荐

  1. 程序员面试金典 - 面试题 03.05. 栈排序(两栈)

    1. 题目 栈排序. 编写程序,对栈进行排序使最小元素位于栈顶. 最多只能使用一个其他的临时栈存放数据,但不得将元素复制到别的数据结构(如数组)中. 该栈支持如下操作:push.pop.peek 和 ...

  2. 程序员面试金典 - 面试题 05.01. 插入(位运算)

    1. 题目 插入.给定两个32位的整数 N 与 M,以及表示比特位置的 i 与 j. 编写一种方法,将 M 插入 N,使得 M 从 N 的第 j 位开始,到第 i 位结束. 假定从 j 位到 i 位足 ...

  3. 程序员面试金典 - 面试题 04.01. 节点间通路(图的遍历)

    1. 题目 节点间通路.给定有向图,设计一个算法,找出两个节点之间是否存在一条路径. 示例1:输入:n = 3, graph = [[0, 1], [0, 2], [1, 2], [1, 2]],st ...

  4. 程序员面试金典 - 面试题 03.06. 动物收容所(队列)

    1. 题目 动物收容所.有家动物收容所只收容狗与猫,且严格遵守"先进先出"的原则. 在收养该收容所的动物时,收养人只能收养所有动物中"最老"(由其进入收容所的时 ...

  5. 程序员面试金典 - 面试题 03.03. 堆盘子 (vector(stack))

    1. 题目 堆盘子.设想有一堆盘子,堆太高可能会倒下来.因此,在现实生活中,盘子堆到一定高度时,我们就会另外堆一堆盘子. 请实现数据结构SetOfStacks,模拟这种行为.SetOfStacks 应 ...

  6. 程序员面试金典 - 面试题 16.01. 交换数字(位运算swap)

    1. 题目 编写一个函数,不用临时变量,直接交换numbers = [a, b]中a与b的值. 示例: 输入: numbers = [1,2] 输出: [2,1]提示: numbers.length ...

  7. 程序员面试金典 - 面试题 10.01. 合并排序的数组

    1. 题目 给定两个排序后的数组 A 和 B,其中 A 的末端有足够的缓冲空间容纳 B. 编写一个方法,将 B 合并入 A 并排序. 初始化 A 和 B 的元素数量分别为 m 和 n. 示例: 输入: ...

  8. 程序员面试金典 - 面试题 02.01. 移除重复节点(哈希set)

    1. 题目 编写代码,移除未排序链表中的重复节点.保留最开始出现的节点. 示例1:输入:[1, 2, 3, 3, 2, 1]输出:[1, 2, 3]示例2:输入:[1, 1, 1, 1, 2]输出:[ ...

  9. 程序员面试金典 - 面试题 16.26. 计算器(栈)

    1. 题目 给定一个包含 正整数.加(+).减(-).乘(*).除(/)的算数表达式(括号除外),计算其结果. 表达式仅包含非负整数,+, - ,*,/ 四种运算符和空格 . 整数除法仅保留整数部分. ...

最新文章

  1. 这所211大学,迎来80后女科学家任副校长
  2. hdu 3613 扩展kmp+回文串
  3. 【深度学习】短袖短裤识别算法冠军方案总结
  4. 关于jQuery中的trigger和triggerHandler方法的使用
  5. SAP CRM Fiori My Opportunity应用文件上传的技术实现
  6. 在线验证json字符串
  7. 领域驱动 开源项目_我如何在开源领域找到工作
  8. 字典中文乱码怎么处理_CATIA教程技巧和二次开发宏:我的零件有很多的几何体,但是几何体的名称是乱的,还有乱码,影响我的后续操作,我该怎么处理?...
  9. 《图像分析基础》的专有名词解析
  10. nlp基础—10.结巴分词的应用及底层原理剖析
  11. 直播盒子源码开发合作
  12. 35 个非主流数据库
  13. 磁传感器AKM8975驱动和中间层
  14. java短语音聊天室_实现一个简单的语音聊天室(源码)
  15. 竖流式沉淀池三角堰计算_一种辐流式沉淀池的双侧堰出水构造的制作方法
  16. Windows 8 平板(推荐)
  17. navicat执行sql文件报错:1840-@@GLOBAL.GTID_PURGED can only be set when @@GLOBAL.GTID_EXECUTED is empty.
  18. 二极管、三极管、MOSFET管知识点总结
  19. HTML中 单复选框的用法
  20. Unity EasyAR Coloring3D AR绘图原理

热门文章

  1. dw1000信标码_DW1000方案工牌型UWB标签,助力10厘米高精度室内定位!
  2. mysql 单标递归_MySql8 WITH RECURSIVE递归查询父子集的方法
  3. JPG PNG GIF BMP图片格式的区别
  4. unity2d随机生成物体_2020 年最好用的一键生成设计神器,全在这里了!
  5. android系统提供了url通信,Android两种HTTP通信,HttpURLConnection和HttpClient
  6. cas-client登录后报INVALID_PROXY_CALLBACK
  7. LeetCode 252. Meeting Rooms (会议室)$
  8. centos7 qt之程序编译 cant start process “cmake”
  9. 剑指Offer 从尾到头打印链表
  10. 原来搞单片机也可以面向对象