如何用一个数组实现3个栈?

2024-01-31

有时,我会遇到以下面试问题:如何用一个数组实现3个堆栈?当然,任何静态分配都不是解决方案。


空间(而非时间)高效。你可以:

1) 定义两个堆栈,从数组端点开始并沿相反方向增长。

2) 将第三个堆栈定义为从中间开始并向您想要的任何方向增长。

3)重新定义Push操作,这样当操作要覆盖其他堆栈时,在Pushing之前将整个中间堆栈向相反方向移动。

您需要以某种结构存储前两个堆栈的堆栈顶部以及第三个堆栈的开头和结尾。

Edit

上面你可能会看到一个例子。尽管可以根据您的问题启发选择其他策略,但转移是通过等空间分区策略完成的。

Edit

根据@ruslik的建议,middle堆栈可以使用后续推送的交替序列来实现。生成的堆栈结构将类似于:

|元素 6 |元素 4 |元素 2 |元素 0 |元素 1 |元素 3 |元素 5 |

在这种情况下,您需要在中间堆栈上存储 n 个元素并使用以下函数:

f[n_] := 1/4 ( (-1)^n (-1 + 2 n) + 1) + BS3  

了解要用于此堆栈的下一个数组元素。

虽然这可能会导致更少的转移,但三个堆栈的实现并不同质,并且不同质(你知道)会导致特殊情况、更多错误和维护代码的困难。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

如何用一个数组实现3个栈? 的相关文章

  • 一种良好且简单的随机性测量方法

    获取一长整数序列 例如 100 000 个 并返回序列随机性的测量值的最佳算法是什么 该函数应返回单个结果 如果序列并非完全随机 则返回 0 如果完全随机 则返回 1 如果序列有点随机 它可以给出介于两者之间的东西 例如0 95 可能是一个
  • 简单的排名算法

    我需要创建一个民意调查 按照项目的好坏顺序创建一个排名列表 我打算向每个用户展示两个项目 让他们选择一个他们认为更好的项目 然后多次重复这个过程 它有点类似于您在社交网络电影 我应该如何根据收到的答案对项目进行排名 看着那 这ELO国际象棋
  • std::cout 语句评估顺序[重复]

    这个问题在这里已经有答案了 pop 函数有什么问题 为什么它不能正常工作 class stack int p Cursor int size public stack int sz Cursor p new int size sz 1 co
  • 在任意时间范围内找到最佳日/月/年间隔的算法?

    如果您有时间表 请说 March 19 2009 July 15 2011 是否有一种算法可以将该时间范围分解为 March 19 2009 March 31 2009 complete days April 1 2009 December
  • heapq.nlargest 的时间复杂度是多少?

    我在看演讲者说 获得t列表中最大的元素n元素可以在O t n 这怎么可能 我的理解是创建堆将是O n 但是复杂度是多少nlargest本身就是O n t or O t 实际的算法是什么 在这种情况下 说话者是错误的 实际成本是O n log
  • 我应该对算法使用递归还是记忆化?

    如果我可以选择使用递归或记忆来解决问题 我应该使用哪一个 换句话说 如果它们都是可行的解决方案 因为它们提供了正确的输出并且可以在我正在使用的代码中合理地表达 那么我什么时候会使用其中一个而不是另一个 它们并不相互排斥 您可以同时使用它们
  • 总和不小于 key 的数组的最小子集

    给定一个数组 假设为非负整数 我们需要找到最小长度子集 使得元素之和不小于 K K 是作为输入提供的另一个整数 是否有可能找到时间复杂度为 O n n 的大 oh 的解决方案 我目前的想法是这样的 我们可以在 O n log n 中对数组进
  • std::vector 与 std::stack

    有什么区别std vector and std stack 显然 向量可以删除集合中的项目 尽管比列表慢得多 而堆栈被构建为仅后进先出的集合 然而 堆栈对于最终物品操作是否更快 它是链表还是动态重新分配的数组 我找不到关于堆栈的太多信息 但
  • 贝尔曼福特算法可以有任意的边顺序吗?

    我刚刚开始学习新算法 但当我阅读 极客为极客而写的贝尔曼福特算法 时 我陷入了困境 http www geeksforgeeks org dynamic programming set 23 bellman ford algorithm h
  • JavaScript 中的埃拉托斯特尼筛法对大量数据无限运行

    我一直在尝试写埃拉托斯特尼筛法 http en wikipedia org wiki Sieve of EratosthenesJavaScript 中的算法 基本上我只是按照以下步骤操作 创建从 2 到 n 1 的连续整数列表 令第一个素
  • 为什么 Dijkstra 算法使用减密钥?

    Dijkstra 教给我的算法如下 while pqueue is not empty distance node pqueue delete min if node has been visited continue else mark
  • 面试题:三个数组,O(N*N)

    假设我们有three长度数组N其中包含任意数量的类型long 然后我们得到一个数字M 相同类型 我们的任务是选择三个数字A B and C每个数组中的一个 换句话说A should从第一个数组中选取 B从第二个开始和C从第三个 所以总和A
  • C 有标准的队列实现吗?

    是否有 C 语言 附带 的队列数据结构实现 或者我必须开发自己的队列数据结构实现 这是一个学校项目 因此我必须使用标准 gcc 安装中存在的东西 或者必须自己实现一个 其他通用数据结构 如链表 堆栈等 又如何呢 尝试这个 Unix 附带了几
  • 颜色变换器功能上的堆栈溢出错误

    我有两种颜色 红色 和 鲑鱼色 我需要动态创建面板以及面板背景颜色 这些颜色必须介于两种颜色之间 红色 public Color x y protected void Page Load object sender EventArgs e
  • 调度算法,找到设定长度的所有非重叠区间

    我需要为我的管理应用程序实现一种算法 该算法将告诉我何时可以将任务分配给哪个用户 我实现了一个蛮力解决方案 它似乎有效 但我想知道是否有更有效的方法来做到这一点 为了简单起见 我重写了算法以对数字列表进行操作 而不是数据库查询等 下面我将尝
  • 查找字符串中最常见的子字符串的算法

    是否有任何算法可用于查找字符串中最常见的短语 或子字符串 例如 以下字符串将 hello world 作为其最常见的两个单词短语 hello world this is hello world hello world repeats thr
  • 大 ר 符号到底代表什么?

    我真的很困惑大 O 大 Omega 和大 Theta 表示法之间的区别 我知道大 O 是上限 大 Omega 是下限 但是大 theta 到底代表什么 我读过这意味着紧束缚 但是 这是什么意思 首先我们来了解一下什么是大O 大Theta和大
  • C++中向量是如何实现的

    我正在考虑如何实施std vector从头开始 它如何调整向量的大小 realloc似乎只适用于普通的旧结构 还是我错了 它是一个简单的模板类 它包装了一个本机数组 它does not use malloc realloc 相反 它使用传递
  • 线程安全的 C++ 堆栈

    我是 C 新手 正在编写一个多线程应用程序 不同的编写者将对象推入堆栈 读者将它们从堆栈中拉出 或至少将指针推入对象 C 中是否有任何内置结构可以在不添加锁定代码等的情况下处理此问题 如果没有 那么 Boost 库呢 EDIT 你好 感谢您
  • 实时战略战争游戏人工智能算法

    我正在设计一款实时策略战争游戏 其中 AI 将负责控制大型六边形地图上的大量单位 可能超过 1000 个 一个单位有许多行动点 可以用于移动 攻击敌方单位或各种特殊行动 例如建造新单位 例如 一辆拥有 5 个行动点的坦克可以花费 3 个行动

随机推荐

  • strcmp() 的分段错误

    if strcmp argv 2 NULL 0 我传递了 3 个命令行参数 但我也想通过上述语句仅使用 2 个命令行参数来运行它 但正在显示分段错误错误 我也尝试过 if argc lt 3 但它也不起作用 同样的分段错误 为什么分段错误
  • 如何在命令之后 console.log 消息的第二部分

    我正在创建一个名为 note 的命令 它将向控制台发送一条注释供我查看 我似乎无法弄清楚如何在命令之后分割第二部分 然后将其记录到控制台 谢谢 这很简单 let msg message content split slice 1 join
  • 如何禁用Java安全管理器?

    有没有办法完全禁用Java安全管理器 我正在尝试db4o的源代码 它使用反射来持久化对象 并且安全管理器似乎不允许反射读取和写入私有或受保护的字段 My code public static void main String args th
  • 单击 jstree 时更改图标

    我有使用 jstree 插件的代码 gems tree on changed jstree function event data console log folder clicked 它可以工作 但现在我想将文件夹的图标更改为关闭以打开
  • Web Essentials 的 RTLCSS 工具不起作用

    我正在将 Web Essentials 扩展与 Visual Studio 2013 一起使用 我想使用 Web EssentialsCSS RTL tool 但是当我在 CSS 文件上运行该工具时 什么也没有发生 Web Essentia
  • ModelState 错误:值“null”对于可为空的字段无效

    ModelState 会抛出错误 因为可空字段为空 我有一个模型 public class PersonModel public int ID get set Required StringLength 256 public string
  • 将测试用例连同参数和附件从 TFS 迁移到 VSTS

    我们计划将测试用例 构建定义和代码从 TFS 迁移到 VSTS 但似乎我们无法将 MTM 中存在的测试用例中的参数和附件移动到 VSTS 我们有办法完成这件事吗 很难将带有参数和附件的测试用例从 TFS 单独迁移到 VSTS 看批量迁移工作
  • 从 compojure 提供 index.html 文件

    我是 clojure 和 compojure 的新手 并尝试使用 compojure 和 Ring 来创建一个基本的 Web 应用程序 这是我的 handler clj ns gitrepos handler require compoju
  • HttpClient:无法访问响应标头

    在一个项目中 我们同时使用 Http 和 HttpClient 来获取标头参数 Http 返回标头参数 但 HttpClient 不返回 constructor private http Http private httpClient Ht
  • 适用于 IE6.0 的 HTML5

    您知道有什么方法可以将此 HTML 代码优化为 IE6 或 7 或 8 而不添加anyHTML 元素 或者 IE 正在跳过所有 HTML5 元素 如果我只想使用 CSS 格式化元素 我不想使用其他功能 document createElem
  • wpf datagrid自动展开第一组

    我有一个数据网格 其中 itemsource 绑定到具有一组的 ListCollectionView 当我填充集合时 我希望第一组自动被视为已展开 如何在 wpf 中对其进行编码 代码隐藏或 mvvm
  • 如何使用git将一个分支重置到另一个分支?

    假设我们有一个hotfixes分支是从创建的master 我们添加了承诺hotfixes 但是这些提交没有用 所以现在我们想从新的副本开始master again 为了更好地澄清 这是参考工作流程 http nvie com posts a
  • Cloud Identity Platform:IdP 发起的 SAML 流是否可行?

    Google Cloud Identity Platform 有文档 https cloud google com identity platform docs how to enable application for saml用于服务提
  • Angular 11 在 SSR @nguniversal/express-engine 上运行 ReferenceError:globalThis 未定义

    尝试跑步 angular fire在 Angular 11 上和 nguniversal express engine 苏维埃社会主义共和国 当初始化时AngularFireModule in app module ts运行命令时出现错误n
  • CPU的矩阵访问和乘法优化

    我在 java 中制作了一些内在优化的矩阵包装器 在 JNI 的帮助下 需要对此予以肯定 你能给出一些关于矩阵优化的提示吗 我要实施的是 矩阵可以表示为四组缓冲区 数组 一组用于水平访问 一组用于垂直访问 一组用于对角线访问 以及一个命令缓
  • 如何在 Eclipse 中组织 100 多个项目?

    当您拥有 5 种以上语言和 100 多个项目时 在我看来 使用一个工作区的默认设置是不可接受的 因为一个工作区会变得非常混乱 拥有一个庞大而杂乱的工作空间会降低您的工作效率 问题 当您拥有 5 种以上语言和 100 多个项目时 使用 Ecl
  • 替代 mongoDB 3.0[之前版本]中的 $strLenCP 字段

    我目前使用的是 mongo 3 0v 我需要找到聚合命令结果中每个字符串的长度 例如 db getCollection temp find key value1 key value2 key valuee2 此查询给出关键字段的长度 db
  • Python 错误 - TypeError:输入最多需要 1 个参数,得到 3 个 [重复]

    这个问题在这里已经有答案了 有人可以解释为什么我不能在目标变量中使用 your name 吗 my name Bryson my age 29 your name input What is your name your age input
  • mySQL - 使用 mysqli 应用行级锁

    使用 PHP 的 mysqli 如何应用行级锁 行级锁会阻止任何人编辑当前存在的符合您条件的行 对吗 但是他们会阻止用户插入符合您条件的行吗 Thanks 如果您想锁定特定行以防止编辑 请使用FOR UPDATE在 SELECT 查询的末尾
  • 如何用一个数组实现3个栈?

    有时 我会遇到以下面试问题 如何用一个数组实现3个堆栈 当然 任何静态分配都不是解决方案 空间 而非时间 高效 你可以 1 定义两个堆栈 从数组端点开始并沿相反方向增长 2 将第三个堆栈定义为从中间开始并向您想要的任何方向增长 3 重新定义