LeetCode筆記:232. Implement Queue using Stacks

問題:

Implement the following operations of a queue using stacks.

  • push(x) -- Push element x to the back of queue.
  • pop() -- Removes the element from in front of queue.
  • peek() -- Get the front element.
  • empty() -- Return whether the queue is empty.
    Notes:
  • You must use only standard operations of a stack -- which means only push to top, peek/pop from top, size, and is empty operations are valid.
  • Depending on your language, stack may not be supported natively. You may simulate a stack by using a list or deque (double-ended queue), as long as you use only standard operations of a stack.
  • You may assume that all operations are valid (for example, no pop or peek operations will be called on an empty queue).

大意:

用堆棧實現(xiàn)一個滿足下列操作的隊列吟逝。

  • push(x)——push一個元素x到隊列尾部宰翅。
  • pop()——從隊列頭部移除一個元素。
  • peek()——獲取隊列頭部的元素。
  • empty()——返回隊列是否是空的属桦。
    注意:
  • 你必須使用標(biāo)準(zhǔn)的堆棧操作——也就是只有push到頂端、從頂端peek/pop终蒂、size以及empty操作是有效的席里。
  • 根據(jù)你的語言,堆椪缶撸可能不是原生支持的碍遍。你可能要通過使用list或者deque(double-ended queue)模仿一個堆棧,就好像在使用標(biāo)準(zhǔn)的堆棧操作一樣阳液。
  • 你可以假設(shè)所有的操作都是有效的(比如不會對一個空隊列進(jìn)行pop或者peek操作)怕敬。

思路:

這道題要我們用堆棧來實現(xiàn)隊列操作。堆棧和隊列最大的區(qū)別就在于堆棧是先進(jìn)后出的帘皿,而隊列是先進(jìn)先出的东跪。所以在實現(xiàn)的時候,其他操作都好說鹰溜,主要是pop和peek操作虽填,我們需要將堆棧本身移除新加入的元素改為移除堆棧底部最開始加入的元素,要達(dá)到這個操作就得用另一個堆棧來臨時存儲數(shù)據(jù)曹动,就像小時候玩的游戲斋日,要先把堆棧里的數(shù)據(jù)全部倒到另一個堆棧里,才能取出最底部的元素仁期,移除或者返回后桑驱,再將元素全部還原。

代碼(Java):

class MyQueue {
    private Stack<Integer> in = new Stack<>();
    private Stack<Integer> out = new Stack<>();
    
    // Push element x to the back of queue.
    public void push(int x) {
        in.push(x);
    }

    // Removes the element from in front of queue.
    public void pop() {
        while (!in.empty()) {
            out.push(in.pop());
        }
        out.pop();
        while (!out.empty()) {
            in.push(out.pop());
        }
    }

    // Get the front element.
    public int peek() {
        while (!in.empty()) {
            out.push(in.pop());
        }
        int result = out.peek();
        while (!out.empty()) {
            in.push(out.pop());
        }
        return result;
    }

    // Return whether the queue is empty.
    public boolean empty() {
        return in.empty();
    }
}

他山之石:

class MyQueue {

    Stack<Integer> input = new Stack();
    Stack<Integer> output = new Stack();
    
    public void push(int x) {
        input.push(x);
    }

    public void pop() {
        peek();
        output.pop();
    }

    public int peek() {
        if (output.empty())
            while (!input.empty())
                output.push(input.pop());
        return output.peek();
    }

    public boolean empty() {
        return input.empty() && output.empty();
    }
}

這個做法其實和我的做法大致是一致的跛蛋,但是我在進(jìn)行pop和peek操作時熬的,需要循環(huán)兩次來進(jìn)行倒出來又倒回去的工作。他的做法則是赊级,只有當(dāng)另一個堆椦嚎颍空了,才將原堆棧的元素倒過去理逊,因為每次倒都是全部倒空橡伞,新加入的元素會加到原堆棧去,而老元素都一批批地倒進(jìn)另一個堆棧了晋被,但我取元素的時候就是從老元素開始取得兑徘,所以只需要從另一個堆棧的頂部開始取就行了,畢竟倒一次順序就反過來了羡洛,當(dāng)取空了另一個堆棧后挂脑,就再倒一次,這樣時間復(fù)雜度就大大降低了。

合集:https://github.com/Cloudox/LeetCode-Record


查看作者首頁

?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末崭闲,一起剝皮案震驚了整個濱河市肋联,隨后出現(xiàn)的幾起案子,更是在濱河造成了極大的恐慌刁俭,老刑警劉巖橄仍,帶你破解...
    沈念sama閱讀 206,378評論 6 481
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件,死亡現(xiàn)場離奇詭異牍戚,居然都是意外死亡侮繁,警方通過查閱死者的電腦和手機,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 88,356評論 2 382
  • 文/潘曉璐 我一進(jìn)店門翘魄,熙熙樓的掌柜王于貴愁眉苦臉地迎上來鼎天,“玉大人,你說我怎么就攤上這事暑竟≌洌” “怎么了?”我有些...
    開封第一講書人閱讀 152,702評論 0 342
  • 文/不壞的土叔 我叫張陵但荤,是天一觀的道長罗岖。 經(jīng)常有香客問我,道長腹躁,這世上最難降的妖魔是什么桑包? 我笑而不...
    開封第一講書人閱讀 55,259評論 1 279
  • 正文 為了忘掉前任,我火速辦了婚禮纺非,結(jié)果婚禮上哑了,老公的妹妹穿的比我還像新娘。我一直安慰自己烧颖,他們只是感情好弱左,可當(dāng)我...
    茶點故事閱讀 64,263評論 5 371
  • 文/花漫 我一把揭開白布。 她就那樣靜靜地躺著炕淮,像睡著了一般拆火。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發(fā)上涂圆,一...
    開封第一講書人閱讀 49,036評論 1 285
  • 那天们镜,我揣著相機與錄音,去河邊找鬼润歉。 笑死模狭,一個胖子當(dāng)著我的面吹牛,可吹牛的內(nèi)容都是我干的踩衩。 我是一名探鬼主播胞皱,決...
    沈念sama閱讀 38,349評論 3 400
  • 文/蒼蘭香墨 我猛地睜開眼邪意,長吁一口氣:“原來是場噩夢啊……” “哼!你這毒婦竟也來了反砌?” 一聲冷哼從身側(cè)響起,我...
    開封第一講書人閱讀 36,979評論 0 259
  • 序言:老撾萬榮一對情侶失蹤萌朱,失蹤者是張志新(化名)和其女友劉穎宴树,沒想到半個月后,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體晶疼,經(jīng)...
    沈念sama閱讀 43,469評論 1 300
  • 正文 獨居荒郊野嶺守林人離奇死亡酒贬,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點故事閱讀 35,938評論 2 323
  • 正文 我和宋清朗相戀三年,在試婚紗的時候發(fā)現(xiàn)自己被綠了翠霍。 大學(xué)時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片锭吨。...
    茶點故事閱讀 38,059評論 1 333
  • 序言:一個原本活蹦亂跳的男人離奇死亡,死狀恐怖寒匙,靈堂內(nèi)的尸體忽然破棺而出零如,到底是詐尸還是另有隱情,我是刑警寧澤锄弱,帶...
    沈念sama閱讀 33,703評論 4 323
  • 正文 年R本政府宣布考蕾,位于F島的核電站,受9級特大地震影響会宪,放射性物質(zhì)發(fā)生泄漏肖卧。R本人自食惡果不足惜,卻給世界環(huán)境...
    茶點故事閱讀 39,257評論 3 307
  • 文/蒙蒙 一掸鹅、第九天 我趴在偏房一處隱蔽的房頂上張望塞帐。 院中可真熱鬧,春花似錦巍沙、人聲如沸葵姥。這莊子的主人今日做“春日...
    開封第一講書人閱讀 30,262評論 0 19
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽牌里。三九已至,卻和暖如春务甥,著一層夾襖步出監(jiān)牢的瞬間牡辽,已是汗流浹背。 一陣腳步聲響...
    開封第一講書人閱讀 31,485評論 1 262
  • 我被黑心中介騙來泰國打工敞临, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留态辛,地道東北人。 一個月前我還...
    沈念sama閱讀 45,501評論 2 354
  • 正文 我出身青樓挺尿,卻偏偏與公主長得像奏黑,于是被迫代替她去往敵國和親炊邦。 傳聞我的和親對象是個殘疾皇子,可洞房花燭夜當(dāng)晚...
    茶點故事閱讀 42,792評論 2 345

推薦閱讀更多精彩內(nèi)容