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

歡迎訪問 生活随笔!

生活随笔

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

编程问答

leetcode 155. 最小栈

發布時間:2025/5/22 编程问答 24 豆豆
生活随笔 收集整理的這篇文章主要介紹了 leetcode 155. 最小栈 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

難度:簡單
頻次:59

題目:

設計一個支持 push ,pop ,top 操作,并能在常數時間內檢索到最小元素的棧。

實現 MinStack 類:

MinStack() 初始化堆棧對象。
void push(int val) 將元素val推入堆棧。
void pop() 刪除堆棧頂部的元素。
int top() 獲取堆棧頂部的元素。
int getMin() 獲取堆棧中的最小元素。

解題思路: 用輔助棧||只用一個棧

用輔助棧注意:
  • 因為提示里的pop等操作都是在非空棧上調用,所以不用考慮太多
  • 初始化輔助棧后添加一個最大的整數
  • 然后只要原來的棧進一個,就判斷值跟輔助棧頂的數哪個小,取小的直接再放輔助棧即可(這里不用把原來的騰出來)
  • 然后出去 就兩個棧一起出去就行了,右邊的棧就記錄了最小值的取值歷史
代碼
class MinStack {public Stack<Integer> stack;public Stack<Integer> minstack;public MinStack() {stack=new Stack<Integer>();minstack=new Stack<Integer>();//最小棧先放入一個最大值,可以一開始不用判斷minstack.push(Integer.MAX_VALUE);}public void push(int val) {stack.push(val);minstack.push(Math.min(minstack.peek(),val));}public void pop() {stack.pop();minstack.pop();}public int top() {return stack.peek();}public int getMin() {return minstack.peek();} }/*** Your MinStack object will be instantiated and called as such:* MinStack obj = new MinStack();* obj.push(val);* obj.pop();* int param_3 = obj.top();* int param_4 = obj.getMin();*/
用一個棧思路還是還差不多,只不過存進去的是一個數組
代碼
class MinStack {public Stack<int []> stack;public MinStack() {stack=new Stack<int []>();}public void push(int val) {if(!stack.isEmpty()){stack.push(new int[] {val,Math.min(val,stack.peek()[1])});}else{stack.push(new int[] {val,val});}}public void pop() {stack.pop();}public int top() {return stack.peek()[0];}public int getMin() {return stack.peek()[1];} }/*** Your MinStack object will be instantiated and called as such:* MinStack obj = new MinStack();* obj.push(val);* obj.pop();* int param_3 = obj.top();* int param_4 = obj.getMin();*/

總結

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

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