【栈与队列】设计一个有getMin功能的栈

xmge · · 636 次点击 · · 开始浏览    
这是一个创建于 的文章,其中的信息可能已经有所发展或是发生改变。

#### 【题目】 实现一个特殊的栈,在实现栈的基本功能的基础上,再实现返回栈种最小元素的操作 #### 【要求】 1、pop、push、getMin 操作的时间复杂度都是O(1) 2、设计的站的类型可以使用现成的栈结构 #### 【难度】 ★☆☆☆ #### 【解答】 ```go package main import ( "errors" "fmt" ) func main() { s := NewStack() for _,num := range []int64{4,2,1,3} { s.Push(num) } for i:=0;i<5;i++{ fmt.Println(s.GetMin()) s.Pop() } } type Stack struct { stackData []int64 stackMin []int64 } func NewStack() *Stack { stack := new(Stack) stack.stackData = []int64{} stack.stackMin = []int64{} return stack } func (s *Stack) Push(num int64) { s.stackData = append(s.stackData, num) if len(s.stackMin) == 0 { s.stackMin = append(s.stackMin, num) }else if s.stackMin[len(s.stackMin)-1] > num { s.stackMin = append(s.stackMin, num) }else { s.stackMin = append(s.stackMin, s.stackMin[len(s.stackMin)-1]) } } func (s *Stack)Pop() (int64,error) { if len(s.stackData) == 0 { return -1,errors.New("Your stack is empty") } num := s.stackData[len(s.stackData)-1] s.stackData = s.stackData[0:len(s.stackData)-1] s.stackMin = s.stackMin[0:len(s.stackMin)-1] return num,nil } func (s *Stack) GetMin() (int64,error) { if len(s.stackData) == 0 { return -1,errors.New("Your stack is empty") } return s.stackMin[len(s.stackMin)-1],nil } ``` 作者: xmge 博客地址:[http://xmge.top....](https://xmge.github.io/2020/04/11/7%E3%80%81%E6%95%B0%E6%8D%AE%E7%BB%93%E6%9E%84%E5%92%8C%E7%AE%97%E6%B3%95/1%E3%80%81%E6%A0%88%E4%B8%8E%E9%98%9F%E5%88%97/1%E3%80%81%E8%AE%BE%E8%AE%A1%E4%B8%80%E4%B8%AA%E6%9C%89getMin%E5%8A%9F%E8%83%BD%E7%9A%84%E6%A0%88/)

有疑问加站长微信联系(非本文作者))

入群交流(和以上内容无关):加入Go大咖交流群,或添加微信:liuxiaoyan-s 备注:入群;或加QQ群:692541889

636 次点击  
加入收藏 微博
添加一条新回复 (您需要 登录 后才能回复 没有账号 ?)
  • 请尽量让自己的回复能够对别人有帮助
  • 支持 Markdown 格式, **粗体**、~~删除线~~、`单行代码`
  • 支持 @ 本站用户;支持表情(输入 : 提示),见 Emoji cheat sheet
  • 图片支持拖拽、截图粘贴等方式上传