TypeScript刷LeetCode[8] 面试题 03.02. 栈的最小值

1/28/2021 TypeScriptLeetCode算法

# 为啥今天用 Go 了

天杀的 LeetCode,昨晚看的时候给我取消了 TypeScript??? 这是逼着我倒 flag9CBFBF858E8DE7B90F04BB6CAF0F5842.jpg

今天用 Go 写完一看,md 又回来了??? 还多了个 Racket??? 未命名.png

# 题目

难度:简单

请设计一个栈,除了常规栈支持的 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
}

点击刷本题吊打我 (opens new window)