一、Problem
用兩個棧實現一個隊列。隊列的聲明如下,請實現它的兩個函數 appendTail 和 deleteHead ,分別完成在隊列尾部插入整數和在隊列頭部刪除整數的功能。(若隊列中沒有元素,deleteHead 操作返回 -1 )
輸入:
["CQueue","appendTail","deleteHead","deleteHead"]
[[],[3],[],[]]
輸出:[null,null,3,-1]
提示:
1 <= values <= 10000
最多會對 appendTail、deleteHead 進行 10000 次調用
二、Solution
方法一:
思路
第一個棧 st 只管添加數據,第二個棧總得做點什麼,deleteHead 的時候,我們要將 st 中的數據遷移到 helper 中,遷移完畢後,棧頂元素就是「隊頭」元素了
class CQueue {
Stack<Integer> st, helper;
public CQueue() {
st = new Stack<>();
helper = new Stack<>();
}
public void appendTail(int v) {
st.push(v);
}
public int deleteHead() {
if (helper.isEmpty()) {
while (!st.isEmpty())
helper.push(st.pop());
}
return helper.isEmpty() ? -1 : helper.pop();
}
}
複雜度分析
- 時間複雜度:,
- 空間複雜度:,