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 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85  // @Title: 最小栈 (Min Stack) // @Author: 15816537946@163.com // @Date: 2019-10-10 01:03:30 // @Runtime: 24 ms // @Memory: 7.3 MB /* * @lc app=leetcode.cn id=155 lang=golang * * [155] 最小栈 * * https://leetcode-cn.com/problems/min-stack/description/ * * algorithms * Easy (49.71%) * Likes: 264 * Dislikes: 0 * Total Accepted: 39.7K * Total Submissions: 79.9K * Testcase Example: '["MinStack","push","push","push","getMin","pop","top","getMin"]\n[[],[-2],[0],[-3],[],[],[],[]]' * * 设计一个支持 push，pop，top 操作，并能在常数时间内检索到最小元素的栈。 * * * push(x) -- 将元素 x 推入栈中。 * pop() -- 删除栈顶的元素。 * top() -- 获取栈顶元素。 * getMin() -- 检索栈中的最小元素。 * * * 示例: * * MinStack minStack = new MinStack(); * minStack.push(-2); * minStack.push(0); * minStack.push(-3); * minStack.getMin(); --> 返回 -3. * minStack.pop(); * minStack.top(); --> 返回 0. * minStack.getMin(); --> 返回 -2. * * */ type MinStack struct { stack []item } type item struct { min, x int } func Constructor() MinStack { return MinStack{} } func (this *MinStack) Push(x int) { min := x if len(this.stack) > 0 && this.GetMin() < x { min = this.GetMin() } this.stack = append(this.stack, item{min, x}) } func (this *MinStack) Top() int { return this.stack[len(this.stack)-1].x } func (this *MinStack) Pop() { this.stack = this.stack[:len(this.stack)-1] } func (this *MinStack) GetMin() int { return this.stack[len(this.stack)-1].min } /** * Your MinStack object will be instantiated and called as such: * obj := Constructor(); * obj.Push(x); * obj.Pop(); * param_3 := obj.Top(); * param_4 := obj.GetMin(); */