日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

LeetCode第155题 最小栈

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

push(x) -- 將元素 x 推入棧中。
pop() -- 刪除棧頂的元素。
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.


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

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

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

只要當前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 }

?

轉載于:https://www.cnblogs.com/rainbow-/p/10390860.html

總結

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

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。