🚀 算法題 🚀 |
🌲 算法刷題專欄 | 面試必備算法 | 面試高頻算法 🍀
🌲 越難的東西,越要努力堅持,因為它具有很高的價值,算法就是這樣?
🌲 作者簡介:碩風和煒,CSDN-Java領域優質創作者🏆,保研|國家獎學金|高中學習JAVA|大學完善JAVA開發技術棧|面試刷題|面經八股文|經驗分享|好用的網站工具分享💎💎💎
🌲 恭喜你發現一枚寶藏博主,趕快收入囊中吧🌻
🌲 人生如棋,我愿為卒,行動雖慢,可誰曾見我后退一步?🎯🎯
🚀 算法題 🚀 |
🍔 目錄
- 🚩 題目鏈接
- ? 題目描述
- 🌟 求解思路&實現代碼&運行結果
- ? 棧 | 隊列
- 🥦 求解思路
- 🥦 實現代碼
- 🥦 運行結果
- 💬 共勉
🚩 題目鏈接
- 225. 用隊列實現棧
? 題目描述
請你僅使用兩個隊列實現一個后入先出(LIFO)的棧,并支持普通棧的全部四種操作(push、top、pop 和 empty)。
實現 MyStack 類:
void push(int x) 將元素 x 壓入棧頂。
int pop() 移除并返回棧頂元素。
int top() 返回棧頂元素。
boolean empty() 如果棧是空的,返回 true ;否則,返回 false 。
注意:
你只能使用隊列的基本操作 —— 也就是 push to back、peek/pop from front、size 和 is empty 這些操作。
你所使用的語言也許不支持隊列。 你可以使用 list (列表)或者 deque(雙端隊列)來模擬一個隊列 , 只要是標準的隊列操作即可。
示例:
輸入:
[“MyStack”, “push”, “push”, “top”, “pop”, “empty”]
[[], [1], [2], [], [], []]
輸出:
[null, null, null, 2, 2, false]
解釋:
MyStack myStack = new MyStack();
myStack.push(1);
myStack.push(2);
myStack.top(); // 返回 2
myStack.pop(); // 返回 2
myStack.empty(); // 返回 False
提示:
1 <= x <= 9
最多調用100 次 push、pop、top 和 empty
每次調用 pop 和 top 都保證棧不為空
進階:你能否僅用一個隊列來實現棧。
🌟 求解思路&實現代碼&運行結果
? 棧 | 隊列
🥦 求解思路
- 題目讓我們使用倆個隊列來實現一個棧,棧的特征是先進后出,后進先出,而我們的隊列是先進先出,后進后出。那我們就將隊列的隊頭來表示棧的棧頂即可。通過倆個隊列,一個隊列1用來存儲棧內的元素,另外一個2用來做入棧操作的輔助隊列。
- 改進思路:push操作元素后,要通過倆個隊列對其中的元素進行一個反轉的操作,這個也就是通過一個隊列實現的改進操作。
- 有了基本的思路,接下來我們就來通過代碼來實現一下。
🥦 實現代碼
class MyStack {private Queue<Integer> queue1;private Queue<Integer> queue2;public MyStack() {queue1 = new LinkedList<Integer>();queue2 = new LinkedList<Integer>();}public void push(int x) {queue2.offer(x);while (!queue1.isEmpty()) {queue2.offer(queue1.poll());}Queue<Integer> temp = queue1;queue1 = queue2;queue2 = temp;}/* 通過一個隊列實現的進階改法public void push(int x) {int n = queue.size();queue.offer(x);for (int i = 0; i < n; i++) {queue.offer(queue.poll());}}*/public int pop() {return queue1.poll();}public int top() {return queue1.peek();}public boolean empty() {return queue1.isEmpty();}
}
🥦 運行結果
💬 共勉
最后,我想和大家分享一句一直激勵我的座右銘,希望可以與大家共勉! |