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

03.01、三合一

03.01、[简单] 三合一

1、题目描述

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

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

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

2、方法思路

  1. 数组表示栈:我们可以使用一个数组arr来表示三个栈。数组被划分为三个部分,每部分存储一个栈的元素。栈 1 的索引范围是[0, stackSize-1],栈 2 的范围是[stackSize, 2*stackSize-1],栈 3 的范围是[2*stackSize, 3*stackSize-1]
  2. 辅助指针数组:用一个长度为 3 的数组tops,存储每个栈的栈顶索引(即当前元素的存储位置),通过栈的编号stackNum来访问对应的栈。
  3. 操作限制
    • 在进行push操作时,需要检查栈是否已经满了。
    • poppeek操作在栈为空时应返回 -1。

3、代码实现

class TripleInOne { private: vector<int> arr; // 用来存储三个栈的数据 vector<int> tops; // 栈指针, 指向三个栈的下一个可用位置 int stackSize; // 每个栈的最大容量 public: // 初始化: 设置栈的大小, 初始化数组和栈顶指针 TripleInOne(int stackSize) { this->stackSize = stackSize; // 保存栈的大小 arr.resize(3 * stackSize); // 数组容量是三个栈的总容量 // 初始化三个栈的指针 // 栈 1 从 0 开始, 栈 2 从 stackSize 开始, 栈 3 从 2*stackSize 开始 tops = {0, stackSize, 2 * stackSize}; } // 向指定的栈中压入一个元素 void push(int stackNum, int value) { // 检查当前栈是否已满 if (tops[stackNum] < (stackNum + 1) * stackSize) { arr[tops[stackNum]++] = value; // 插入值并更新栈顶索引 } } // 从指定的栈中弹出栈顶元素 int pop(int stackNum) { if (isEmpty(stackNum)) { // 栈为空时返回-1 return -1; } return arr[--tops[stackNum]]; // 弹出栈顶元素并更新栈顶索引 } // 查看指定栈的栈顶元素 int peek(int stackNum) { // 检查栈是否为空 if (isEmpty(stackNum)) { // 栈为空时返回-1 return -1; } return arr[tops[stackNum] - 1]; // 返回栈顶元素 } // 判断指定栈是否为空 bool isEmpty(int stackNum) { // 如果栈指针等于栈的起始位置,说明栈为空 return tops[stackNum] == stackSize * stackNum; } };

4、代码解析

5、时间复杂度

这个解决方案使用了固定大小的数组来实现三个栈的分隔,逻辑简单且效率高。在面试中这是一个常见的问题,考察你对栈和数组的理解,以及如何在限制条件下实现数据结构。

http://www.jsqmd.com/news/475390/

相关文章:

  • 终极编程字体指南:Codeface位图字体画廊的完整使用教程
  • 2026年全案设计公司如何选?这份避坑指南请收好 - 2026年企业推荐榜
  • PyCaret时间序列预测:LSTM与传统模型对比
  • 如何利用RancherOS实现系统服务容器化:从udev到syslog的完整指南
  • 消息队列RabbitMQ的配置操作及使用
  • Django-Oscar搜索功能优化:从基础搜索到智能推荐的终极指南
  • 终极DCGAN训练指南:解决模式崩溃与梯度消失的7个实用技巧
  • 数据清洗从未如此简单:csvclean帮你一键修复CSV文件错误
  • Leetcode_88. 合并两个有序数组
  • 如何快速掌握wysihtml5富文本编辑器:自动链接与语义化标记的完整指南
  • Inputmask终极指南:如何快速实现完美的表单输入控制
  • Solarized终端背景图像:色彩方案与壁纸融合技巧
  • 2026年广式茶点品牌测评:地道风味与品质之选 - 2026年企业推荐榜
  • SW - 归档保存装配图时,可以连装配图中的零件一起保存
  • 如何使用ProcessHacker进行系统调用统计:全面分析进程的系统调用频率与类型
  • 在线查看 Android 系统源代码 AOSPXRef and AndroidXRef
  • 漏洞扫描工具实战指南:从原理到渗透测试应用
  • 2026年3月山东蒸汽锅炉品牌综合实力深度解析 - 2026年企业推荐榜
  • 在线查看 Android 系统源代码 Android Code Search
  • 混沌工程终极指南:通过故障演练识别和缓解系统风险的7个关键步骤
  • 红队ATKCK|红日靶场实战复盘与深度解析
  • 2026年保定短视频运营团队专业实力深度评测与选型指南 - 2026年企业推荐榜
  • 在线查看 Android 系统源代码 Git repositories on android
  • 深入理解@tailwindcss/line-clamp实现原理:从源码到实际应用
  • MCM/ICM历年优秀论文解析:从特等奖作品中学习建模思路与写作技巧
  • 网站突然被微信屏蔽?先别急着改代码!这5个自查步骤能省80%时间
  • 面向新能源汽车动力总成控制的多变量实时监控与分析平台
  • 【离散数学速成指南】谓词逻辑9大高频考点解析(左孝凌版)
  • 2026年贵州卫生间改造服务商综合评测与选型指南 - 2026年企业推荐榜
  • 猫狗识别大模型——基于python语言