TypeScript刷LeetCode[8] 面试题 03.02. 栈的最小值
王昭君 1/28/2021 TypeScriptLeetCode算法
# 为啥今天用 Go 了
天杀的 LeetCode,昨晚看的时候给我取消了 TypeScript??? 这是逼着我倒 flag
今天用 Go 写完一看,md 又回来了??? 还多了个 Racket???
# 题目
难度:简单
请设计一个栈,除了常规栈支持的 pop 与 push 函数以外,还支持 min 函数,该函数返回栈元素中的最小值。执行 push、pop 和 min 操作的时间复杂度必须为 O(1)。
示例:
MinStack minStack = new MinStack();
minStack.push(-2);
minStack.push(0);
minStack.push(-3);
minStack.getMin(); --> 返回 -3.
minStack.pop();
minStack.top(); --> 返回 0.
minStack.getMin(); --> 返回 -2.
# 代码
练习下 go 的语法,好久没写都快忘了。。。
type Node struct {
Val int
Next *Node
}
type MinStack struct {
Head *Node
}
func Constructor() MinStack {
stack := MinStack{
Head: nil,
}
return stack
}
func (this *MinStack) Push(x int) {
if this.Head == nil {
this.Head = &Node{
Val: x,
Next: nil,
}
} else {
top := Node{
Val: x,
Next: this.Head,
}
this.Head = &top
}
}
func (this *MinStack) Pop() {
this.Head = this.Head.Next
}
func (this *MinStack) Top() int {
return this.Head.Val
}
func (this *MinStack) GetMin() int {
min := this.Top()
p := this.Head
for p != nil {
if min > p.Val {
min = p.Val
}
p = p.Next
}
return min
}