20 包含min函数的栈
1 包含min函数的栈
2 //题目:定义栈的数据结构,请在该类型中实现一个能够得到栈最小元素的min函数。 3 //思路:常规思路===每次压入一个元素,将栈中所有的元素进行排序,让最小的元素位于栈顶,
这样就能再O(1)时间内得到最小元素。但是不能保证最后压入栈的元素能够先出栈。此时就不再是数据结构了。 4 //换思维:每次压入一个元素,就将其与当前元素做比较,如果该元素比当前最小的元素还要小,就更新最小元素。
每次将最小元素的值保存到临时栈中。[当最小栈从数据栈内被弹出之后,同时弹出辅助栈的栈顶元素, 5 //此时辅助栈的新站顶元素就是下一个最小值] 6 //*遇到栈,首先要定义栈 7 //* stack mStack; 8 //*备份栈 9 //* stack tmpStack; 10 class Solution 11 { 12 public: 13 stack<int> m_data; 14 stack<int> m_min; 15 void push(int value) 16 { 17 m_data.push(value); 18 if (m_min.size() == 0 || value < m_min.top()) 19 { 20 m_min.push(value); 21 } 22 else 23 { 24 m_min.push(m_min.top()); 25 } 26 return; 27 } 28 void pop() 29 { 30 m_data.pop(); 31 m_min.pop(); 32 } 33 int top() 34 { 35 return m_data.top(); 36 } 37 int min() 38 { 39 40 return m_min.top(); 41 } 42 };
在代码的世界尽情的翱翔吧!