leetcode力扣 155最小栈 go实现

记录一下leetcode刷题,大牛请绕道

思路

这个题的核心点还是在于用常数时间内检索到最小元素的栈,也就是用空间换时间。这样的话我们设计一个辅助栈,当栈为空的时候,第一次push的话,主栈和辅助栈都同时push传入的值;如果栈不为空,那么就先从辅助栈获取栈顶的值,然后将插入的值与栈顶的值进行比较,将数值小的那个值push进入辅助栈,这样最后调用GetMin()的话就是从辅助栈的栈顶拿值,这个值一定是最小值了。

代码

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
type MinStack struct {
stack []int //主栈
min_stack []int //最小元素辅助栈
}

func Constructor() MinStack {
return MinStack{
stack: []int{},
min_stack: []int{},
}
}


// 将元素 x 推入栈中。
func (this *MinStack) Push(val int) {
minstack_len := len(this.min_stack)
//如果是空栈的话,都直接入栈即可
if minstack_len == 0 {
this.stack = append(this.stack,val)
this.min_stack = append(this.min_stack,val)
}else {
/* 取辅助栈的栈顶元素与插入元素进行比较,将插入元素与辅助栈栈顶元素进行比较
把小的元素push到辅助栈中
*/
this.stack = append(this.stack,val)
min_top := this.min_stack[minstack_len-1]
//fmt.Println("min_top",min_top)
if val > min_top {
this.min_stack = append(this.min_stack, min_top)
} else {
this.min_stack = append(this.min_stack, val)
}
}
}


func (this *MinStack) Pop() {
stack_len := len(this.stack)
minstack_len := len(this.min_stack)
this.stack = this.stack[:stack_len -1]

this.min_stack = this.min_stack[:minstack_len-1]
}


func (this *MinStack) Top() int {
stack_len := len(this.stack)
return this.stack[stack_len -1]
}


func (this *MinStack) GetMin() int {
minstack_len := len(this.min_stack)
return this.min_stack[minstack_len - 1]
}

本文标题:leetcode力扣 155最小栈 go实现

文章作者:xianyu123

发布时间:2022年01月09日 - 16:42

最后更新:2022年01月09日 - 16:55

原始链接:http://0clickjacking0.github.io/2022/01/09/leetcode力扣-155最小栈-go实现/

许可协议: 署名-非商业性使用-禁止演绎 4.0 国际 转载请保留原文链接及作者。

-------------    本文结束  感谢您的阅读    -------------