[leetcode]155. Min Stack
阿新 • • 發佈:2018-12-04
Design a stack that supports push, pop, top, and retrieving the minimum element in constant time.
- push(x) -- Push element x onto stack.
- pop() -- Removes the element on top of the stack.
- top() -- Get the top element.
- getMin() -- Retrieve the minimum element in the stack.
分析:
實現棧的一些函式功能,主要是返回棧頂元素和最小元素。可以定義兩個棧s1、s2,s1用來記錄棧經過正常入棧出棧之後的元素,s2主要將棧內最小元素放入棧頂。新元素入棧時,與s2棧頂元素比較,如果比之小,則將該元素入棧s1、s2,否則只入棧s1;元素出棧時,比較出棧元素與s2棧頂元素是否相等,若相等,則s1、s2棧頂元素全部出棧,否則只出棧s1棧頂元素。這樣求棧頂元素只要返回s1棧頂元素即可;求棧內最小元素只要返回s2棧頂元素即可。
class MinStack { public: /** initialize your data structure here. */ stack<int> s1, s2; MinStack() { } void push(int x) { s1.push(x); if(s2.empty() || x<=s2.top()) s2.push(x); } void pop() { if(s1.top() == s2.top()) s2.pop(); s1.pop(); } int top() { return s1.top(); } int getMin() { return s2.top(); } };