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

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 人文社科 > 生活经验 >内容正文

生活经验

leetcode-155 最小栈

發布時間:2023/11/27 生活经验 30 豆豆
生活随笔 收集整理的這篇文章主要介紹了 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.

方法一:使用輔助棧
使用輔助棧來存儲當前數據棧的最小元素,即插入元素時 同時維護數據棧和輔助棧,數據棧正常放入元素;輔助棧的棧頂則保存當前數據棧中最小的元素即可

實現如下:

class MinStack {
public:/** initialize your data structure here. */MinStack() {}void push(int x) {data.push(x);//維護輔助棧//如果當前元素大小 小于輔助棧頂元素,則將當前元素放入輔助棧中if (min_stack.empty()) {min_stack.push(x);} else {if (x < min_stack.top()) {min_stack.push(x);} else {min_stack.push(min_stack.top());}}}void pop() {data.pop();min_stack.pop();}int top() {return data.top();}int getMin() {return min_stack.top();}
private:stack<int> min_stack;stack<int> data;
};

方法二:不用輔助棧
插入元素時同時,兩個為一個單元,第二個為棧最小元素,第一個為要插入的元素

實現如下:

class MinStack {
public:/** initialize your data structure here. */MinStack() {}void push(int x) {if(data.empty()){data.push(x);data.push(x);} else {if (x >= data.top()) {int tmp = data.top();data.push(x);data.push(tmp);} else {data.push(x);data.push(x);}}}void pop() {data.pop();data.pop();}//返回時需先保存棧頂的最小元素int top() {int tmp = data.top();data.pop();int result = data.top();data.push(tmp);return result;}int getMin() {return data.top();}
private:stack<int> data;
};

總結

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

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