LeetCode剑指offer算法备战春招-包含min函数的栈
生活随笔
收集整理的這篇文章主要介紹了
LeetCode剑指offer算法备战春招-包含min函数的栈
小編覺得挺不錯的,現在分享給大家,幫大家做個參考.
劍指 Offer 30. 包含min函數的棧
定義棧的數據結構,請在該類型中實現一個能夠得到棧的最小元素的 min 函數在該棧中,調用 min、push 及 pop 的時間復雜度都是 O(1)。
示例:
MinStack minStack = new MinStack();
minStack.push(-2);
minStack.push(0);
minStack.push(-3);
minStack.min(); --> 返回 -3.
minStack.pop();
minStack.top(); --> 返回 0.
minStack.min(); --> 返回 -2.
提示:
各函數的調用總次數不超過 20000 次
思路:
定義一個輔助棧,最小的永遠是棧頂,加入正常棧的時候維護這個輔助棧
- 加入:
- ①如果輔助棧為空就直接加入||如果輔助棧頂元素大于現在要加入的元素就加入輔助棧
- ②無論何時,A都是正常的棧,正常入棧
- 出棧:
- 如果正常出棧的元素是輔助棧的棧頂,輔助棧也彈出
- min:
- 輔助棧的棧頂就是最小的
知識點
peek與poop
Stack.peek() 返回棧頂元素。
Stack.pop() 返回棧頂元素,并在棧中刪除它。
Integer.equals()與“==”
注意這里的代碼的pop()處如果用"=="取代equals就會出錯,這是因為:
==和equals的不同:https://www.cnblogs.com/mrhgw/p/10449391.html
import java.util.Stack;/*** 包含min函數的棧* 定義棧的數據結構,請在該類型中實現一個能夠得到棧的最小元素的 min 函數在該棧中,調用 min、push 及 pop 的時間復雜度都是 O(1)。* 思路:定義一個輔助棧,最小的永遠是棧頂,加入正常棧的時候維護這個輔助棧* 加入:* ①如果輔助棧為空就直接加入||如果輔助棧頂元素大于現在要加入的元素就加入輔助棧* ②無論何時,A都是正常的棧,正常入棧* 出棧:* 如果正常出棧的元素是輔助棧的棧頂,輔助棧也彈出* min:* 輔助棧的棧頂就是最小的*/ class MinStack {Stack<Integer> A,B;/** initialize your data structure here. */public MinStack() {A=new Stack<>();B=new Stack<>();}//入棧public void push(int x) {A.push(x);//A是正常棧,都正常加入if (B.empty()||B.peek()>=x){//B是輔助棧,存儲最小值B.push(x);}}public void pop() {//如果當前最小值是B的棧頂,A和B棧都同時出棧if (A.pop().equals(B.peek())){B.pop();}}public int top() {return A.peek();}public int min() {return B.peek();} }總結
以上是生活随笔為你收集整理的LeetCode剑指offer算法备战春招-包含min函数的栈的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: Linux 下如何进入 MySQL 命令
- 下一篇: mysql事务是什么?