• 请不要在回答技术问题时复制粘贴 AI 生成的内容
28hua
V2EX  ›  程序员

三个栈实现一个队列

  •  
  •   28hua · Apr 30, 2015 · 5107 views
    This topic created in 4217 days ago, the information mentioned may be changed or developed.
    保证每个队列操作(在最坏情况下)都只需要常数次的栈操作(警告:非常难!)

    http://www.oschina.net/question/585840_119204

    问题下的回答看不懂了
    8 replies  •  2015-05-03 09:55:18 +08:00
    ryd994
    ryd994
    Apr 30, 2015
    1
    答案2属于脑筋急转弯,窃以为不算答案,真要这么实现早被内存玩死了
    答案1的汉诺塔属于正常人第一反应
    sgissb1
    sgissb1
    May 1, 2015
    3
    不是2个栈实现一个队列吗?怎么是三个呢?
    ryd994
    ryd994
    May 1, 2015 via Android
    4
    @sgissb1 两个实现起来很简单,但是至少O(n)
    现在要O(1)
    入队压栈A,出队弹栈B
    如果栈B空了,就一个个从栈A倒出过来
    sgissb1
    sgissb1
    May 2, 2015
    5
    @ryd994 哦,没注意。
    zwzmzd
    zwzmzd
    May 3, 2015 via Android
    6
    其实从摊还角度来看,两个栈的实现平均每次复杂度也是O(1)
    uleh
    uleh
    May 3, 2015 via iPhone
    7
    没get到这题的点在哪里…
    汉娜塔有个限制是每堆都必须按从小到大排列,栈和队列又没有这个限制。
    进的时候入栈1,出的时候栈1全部出栈并入栈2,然后按栈2顺序出。
    出栈过程中发生入栈操作则使用栈3。
    不就可以了么。
    uleh
    uleh
    May 3, 2015 via iPhone
    8
    @uleh 常数次栈操作…问题是出在这呢
    About   ·   Help   ·   Advertise   ·   Blog   ·   API   ·   FAQ   ·   Privacy   ·   Solana   ·   1835 Online   Highest 6679   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 31ms · UTC 06:42 · PVG 14:42 · LAX 22:42 · JFK 01:42
    ♥ Do have faith in what you're doing.