LeetCode155 棧·最小棧(C++)
阿新 • • 發佈:2018-11-07
ini 如果 賦值 出棧 pop HERE 之前 支持 pri
題目描述:
設計一個支持 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(); */
LeetCode155 棧·最小棧(C++)