日韩av黄I国产麻豆传媒I国产91av视频在线观看I日韩一区二区三区在线看I美女国产在线I麻豆视频国产在线观看I成人黄色短片

歡迎訪問 生活随笔!

生活随笔

當(dāng)前位置: 首頁 >

LeetCode第155题 最小栈

發(fā)布時間:2025/3/20 41 豆豆
生活随笔 收集整理的這篇文章主要介紹了 LeetCode第155题 最小栈 小編覺得挺不錯的,現(xiàn)在分享給大家,幫大家做個參考.
設(shè)計一個支持 push,pop,top 操作,并能在常數(shù)時間內(nèi)檢索到最小元素的棧。

push(x) -- 將元素 x 推入棧中。
pop() -- 刪除棧頂?shù)脑亍?/span>
top() -- 獲取棧頂元素。
getMin() -- 檢索棧中的最小元素。
示例:

MinStack minStack = new MinStack();
minStack.push(-2);
minStack.push(0);
minStack.push(-3);
minStack.getMin(); --> 返回 -3.
minStack.pop();
minStack.top(); --> 返回 0.
minStack.getMin(); --> 返回 -2.


思路: 使用太多封裝雖然偷了懶,效率影響確實很大...

使用兩個棧,一個保存真實的數(shù)據(jù),另一個保存所有最小值

eg:
push : -1 0 -2 3 4
push操作完成后,兩個棧的情況如下:
stack: -1 0 -2 3 4
minData: -1 -2

只要當(dāng)前mindata的top(-2)未被彈出,棧中的最小值就一直是-2.
如果此時stack彈出的值為(-2),那么mindata中的值也要更新,將-2彈出.
那么此時
stack: -1 0
minData: -1
棧中的最小值就為-1了


1 class MinStack { 2 3 /** 4 * initialize your data structure here. 5 */ 6 private Stack<Integer> stack; // 7 private Stack<Integer> minData; //保存最小值的棧 8 9 public MinStack() { 10 11 stack = new Stack<>(); 12 minData = new Stack<>(); 13 } 14 15 public void push(int x) { 16 stack.push(x); 17 if (minData.empty() || minData.peek() >= x) { 18 minData.push(x); 19 } 20 } 21 22 public void pop() { 23 if (stack.peek().equals(minData.peek())) { 24 minData.pop(); 25 } 26 stack.pop(); 27 } 28 29 public int top() { 30 return stack.peek(); 31 } 32 33 public int getMin() { 34 return minData.peek(); 35 } 36 }

?

轉(zhuǎn)載于:https://www.cnblogs.com/rainbow-/p/10390860.html

總結(jié)

以上是生活随笔為你收集整理的LeetCode第155题 最小栈的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網(wǎng)站內(nèi)容還不錯,歡迎將生活随笔推薦給好友。