算法:用兩個棧實現隊列

用兩個棧實現一個隊列。隊列的聲明如下,請實現它的兩個函數 appendTail 和 deleteHead ,分別完成在隊列尾部插入整數和在隊列頭部刪除整數的功能。(若隊列中沒有元素,deleteHead 操作返回 -1 )
示例
輸入:
["CQueue","appendTail","deleteHead","deleteHead"]
[[],[3],[],[]]
輸出:[null,null,3,-1]
提示:
1 <= values <= 10000
最多會對 appendTail、deleteHead 進行 10000 次調用
思路
將一個棧當作輸入棧,用于壓入 appendTail 傳入的數據;另一個棧當作輸出棧,用于 deleteHead 操作。
每次 deleteHead 時,若輸出棧為空則將輸入棧的全部數據依次彈出并壓入輸出棧,這樣輸出棧從棧頂往棧底的順序就是隊列從隊首往隊尾的順序。

復雜度分析
時間復雜度:appendTail 為 O(1),deleteHead 為均攤 O(1)。對于每個元素,至多入棧和出棧各兩次,故均攤復雜度為 O(1)。
空間復雜度:O(n)。其中 n 是操作總數。對于有 n 次 appendTail 操作的情況,隊列中會有 n 個元素,故空間復雜度為 O(n)。
寫在最后
本文內容出處是力扣官網,希望和大家一起刷算法,在后面的路上不變禿但是變強!
好兄弟可以點贊并關注我的公眾號“javaAnswer”,全部都是干貨。

標簽: