题解 | #包含min函数的栈#
包含min函数的栈
https://www.nowcoder.com/practice/4c776177d2c04c2494f2555c9fcc1e49
class Solution { public: //压栈 void push(int value) { m_currentStack.push(value); if (m_minValueStack.empty()) { m_minValueStack.push(value); } else { //有更小的,那么压栈进去,记录当前的最小值 if (value <= m_minValueStack.top()) { m_minValueStack.push(value); } } } //注意考虑栈空情况 void pop() { if (m_currentStack.top() == m_minValueStack.top()) { m_currentStack.pop(); m_minValueStack.pop(); } else { m_currentStack.pop(); } } //获取栈顶元素 int top() { return m_currentStack.top(); } //获取最小值 int min() { return m_minValueStack.top(); } stack<int> m_currentStack;//当前的栈 stack<int> m_minValueStack;//存储当前最小值 };
采用双栈法进行求解!
package main import "fmt" // 定义两个stack var currentStack, minValueStack []int // 压栈操作 func Push(node int) { currentStack = append(currentStack, node) //当前可以直接追加 if len(minValueStack) == 0 { minValueStack = append(minValueStack, node) } else { if node <= Min() { minValueStack = append(minValueStack, node) } } } // 出栈操作 func Pop() { if Top() == Min() { currentStack = currentStack[:len(currentStack)-1] minValueStack = minValueStack[:len(minValueStack)-1] } else { currentStack = currentStack[:len(currentStack)-1] } } // 返回栈顶 func Top() int { return currentStack[len(currentStack)-1] } // 返回最小值 func Min() int { return minValueStack[len(minValueStack)-1] } func main() { Push(9) Push(1) Push(6) fmt.Println(Min()) Pop() fmt.Println(Top()) fmt.Println(Min()) Pop() //fmt.Println(Top()) fmt.Println(Min()) }