如何用一个数组实现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个栈? 的相关文章

  • 在 C 中打印字符串的所有排列

    我正在学习回溯和递归 并且我陷入了打印字符串所有排列的算法 我用以下方法解决了它贝尔算法 http programminggeeks com bell algorithm for permutation 用于排列 但我无法理解递归方法 我在
  • 硬币兑换的空间优化解决方案

    给定一个值 N 如果我们想要找 N 分钱 并且我们有无限供应每种 S S1 S2 Sm 价值的硬币 我们可以有多少种找零方式 硬币的顺序并不重要 例如 对于 N 4 且 S 1 2 3 有四种解 1 1 1 1 1 1 2 2 2 1 3
  • 树中的节点是否被视为其自己的祖先?

    我想知道计算机科学背景下对 祖先 定义的共识是什么 我问只是因为在算法简介 http en wikipedia org wiki Introduction to Algorithms 第二版 第 14 页 第259章 有算法的描述Tree
  • 有没有比使用 backtrace() 更便宜的方法来查找调用堆栈的深度?

    我的日志记录代码使用的返回值回溯 http linux die net man 3 backtrace确定当前堆栈深度 出于漂亮的打印目的 但我可以从分析中看到这是一个相当昂贵的调用 我不认为有更便宜的方法吗 请注意 我不关心帧地址 只关心
  • 这个洗牌算法有什么问题吗?

    我一直在做一些休闲假期计算 我的迷你项目是模拟意大利游戏 tomboli 一个关键的组成部分是对以下过程的模拟 游戏由一名男子控制 他拿着一袋 90 个弹珠 编号为 1 到 90 他从袋中随机取出一颗弹珠 每次向玩家喊出弹珠编号 经过一番思
  • 相当于一个允许重复键的排序字典

    我需要一个数据结构 可以通过与对象关联的浮动键对对象进行排序 从低到低的在前 问题是键代表成本 所以经常有重复 我不关心这一点 因为如果两个具有相同的成本 我只会抓住第一个 因为它没有区别 问题是编译器抱怨 是否有一种数据结构的行为方式相同
  • 用 ruby​​ 解决旅行商问题(50 多个位置)

    我在一家快递公司工作 目前 我们 手动 解决了 50 多个地点的路线 我一直在考虑使用 Google Maps API 来解决这个问题 但我读到有 24 点的限制 目前我们在服务器中使用 Rails 因此我正在考虑使用 ruby 脚本来获取
  • 在二维平面中找到距离 P 点最近的 K 个点

    资料来源 亚马逊面试问题 解决方案1制作大小为 K 的堆并按最小距离收集点O NLogK 复杂 解决方案2 取大小为 N 的数组并按距离排序 应该使用QuickSort 霍尔修改 取前 K 点作为答案 这太复杂了 NlogN 但可以优化到近
  • 合并空间上接近的路径/线段的算法

    我正在寻找一种用于街道地图制图概括的几何算法 名称 在我的地图数据中 我有许多路径 点的有序列表 由线段连接 这些路径彼此靠近且几乎平行 我如何 1 识别这些 相邻路径 即如何找到比某个阈值更接近的路径 以及 2 将它们合并成一条路径 即如
  • 如何最小化两个子多边形的最大纵横比?

    我想使用直线将凸多边形切成给定面积比的两部分 以使两个子多边形的较大纵横比最小化 目前我的方法包括选择一个随机起点 计算将多边形分割成目标区域的适当终点 然后计算两个纵横比中较大的一个 然后重复这个很多次 直到我足够接近最小值 多边形 A
  • 优雅的折线“左移”测试

    Given X Y 坐标 即车辆的位置 X Y 数组 它们是折线中的顶点 请注意 折线仅由直线段组成 没有圆弧 我想要的是 计算车辆是在折线的左侧还是右侧 当然还是在顶部 我的做法 迭代所有线段 并计算到每个线段的距离 然后 对于最近的段
  • C# 计算LRC(纵向冗余检查)

    我一直在到处研究这个问题 所有 LRC 实现似乎都没有给我正确的答案 花了几天时间后 我决定将我的代码放在这里 看看其他人是否可以发现问题 这是代码 C Input Data 31303030315E315E31303030325E315E
  • 当目标是查找某个字符串的所有出现情况时,KMP 最坏情况的复杂度是多少?

    我还想知道哪种算法在查找另一个字符串中所有出现的字符串时具有最坏情况的复杂性 博耶 摩尔算法似乎具有线性时间复杂度 KMP 算法在查找字符串中所有出现的模式时具有线性复杂度 如 Boyer Moore 算法1 如果您尝试在 aaaaaaaa
  • 检查数独字段的很酷的算法?

    有谁知道一个简单的算法来检查数独配置是否有效 我想出的最简单的算法是 对于大小为 n 的板 伪代码 for each row for each number k in 1 n if k is not in the row using ano
  • 如何使用KDTrees实现最近邻搜索?

    所以 我正在实施一个KD Tree http en wikipedia org wiki Kd tree进行最近邻搜索 我已经构建了树部分 但我认为我没有完全理解搜索部分 关于遍历树来搜索邻居 维基百科文章如下 Starting with
  • 交换两个向量之间的值,使两个向量的 max_element 之和最小

    这是 Codechef 的问题 但请耐心等待 https www codechef com ZCOPRAC problems ZCO16001 https www codechef com ZCOPRAC problems ZCO16001
  • 为什么jdk中没有ConcurrentLinkedHashMap类?

    这个问题直接接着问从我之前的问题来看 https stackoverflow com q 12299731 1527084 我想我的第二个问题的答案是否定的 所以我想了解为什么 java util concurrent 包中没有 Concu
  • 基于时间的算法评分

    我们希望创建一种评分算法 在更短的时间内获得更高的分数 在更长的时间内获得更少的分数 需要注意的是 没有实际范围 因此时间范围可以从 100 毫秒到长达 10 分钟或更长时间 点范围为 0 到 50 谢谢你的帮助 你可以简单地把它变成一个线
  • 搜索/排序算法 - 是否有类似 GoF 的列表?

    我是一名自学成才的开发人员 坦率地说 我不太擅长找出在任何特定情况下使用哪种搜索或排序算法 我只是想知道是否有设计模式 esque 列出了以太坊中可用的常见算法 供我添加书签 就像是 算法名称 带有别名 如果有的话 它解决的问题 大O成本
  • 用 Java 创建迷宫求解算法

    我被分配了用 Java 创建迷宫求解器的任务 这是任务 Write an application that finds a path through a maze The maze should be read from a file A

随机推荐

  • 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 重新定义