1. 程式人生 > >LeetCode155 棧·最小棧(C++)

LeetCode155 棧·最小棧(C++)

題目描述:

設計一個支援 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.


/*解題思路:
在入棧時,如果這個元素比最小值小,那麼,我們讓最小值入棧,然後將元素值賦給最小值,即新的最小值,然後正常將這個元素入棧;在出棧時,如果棧頂元素與最小值相等,說明他的下一個元素是之前push的最小值(上一個),出棧後,將這個之前的最小值賦值給最新的最小值。(每次push進去的最小值都是下面元素的最小值)
*/
class MinStack {
public:
    /** initialize your data structure here. */
    MinStack() {}
    void push(int x) {
        if (minstack.empty())
        {
            minstack.push(x);
            min 
= x; } else { if (x<=min)//此處必須為<=,否則可以試一下{0,1,0}的情況 { minstack.push(min); min = x; } minstack.push(x); } } void pop() { if (minstack.empty()) return;
int index = this->top(); minstack.pop(); if (min == index && !minstack.empty()) { min = this->top(); minstack.pop(); } } int top() { return minstack.top(); } int getMin() { return min; } private: int min; stack<int>minstack; }; /** * Your MinStack object will be instantiated and called as such: * MinStack obj = new MinStack(); * obj.push(x); * obj.pop(); * int param_3 = obj.top(); * int param_4 = obj.getMin(); */