NOTE
Stack with a min Function
Record using an auxiliary minimum stack to retrieve the stack minimum in O(1) time.
This is a historical learning note and may contain outdated or incomplete understanding.
1. Problem Description
Define a stack data structure and implement a min function in this type that can obtain the minimum element contained in the stack, with O(1) time complexity.
2. Approach
- Use an additional minimum-value stack
3. Implementation
package main
var data []int
var minStack []int
func stackPush(stack *[]int, num int) {
*stack = append(*stack, num)
}
func stackPop(stack *[]int) int {
top := (*stack)[len(*stack)-1]
*stack = (*stack)[:len(*stack)-1]
return top
}
func stackEmpty(stack []int) bool {
return len(stack) == 0
}
func stackTop(stack []int) int {
return stack[len(stack)-1]
}
func Push(node int) {
if stackEmpty(data) {
stackPush(&data, node)
stackPush(&minStack, node)
return
}
top := stackTop(minStack)
if top < node {
stackPush(&minStack, top)
} else {
stackPush(&minStack, node)
}
stackPush(&data, node)
}
func Pop() {
if stackEmpty(data) {
return
}
stackPop(&minStack)
stackPop(&data)
}
func Top() int {
if stackEmpty(data) {
return 0
}
return stackTop(data)
}
func Min() int {
if stackEmpty(minStack) {
return 0
}
return stackTop(minStack)
}
Discussion
Sign in with GitHub to comment. Discussions are stored as GitHub Issues.View on GitHub