程序员面试金典03.05_go_栈排序
题目栈排序 。编写程序 , 对栈进行排序使最小元素位于栈顶 。
最多只能使用一个其他的临时栈存放数据 , 但不得将元素复制到别的数据结构(如数组)中 。
该栈支持如下操作:push、pop、peek 和 isEmpty 。 当栈为空时 , peek 返回 -1 。
示例1:输入:["SortedStack", "push", "push", "peek", "pop", "peek"]
[[], [1], [2], [], [], []]
输出:[null,null,null,1,null,2]
示例2:输入: ["SortedStack", "pop", "pop", "push", "pop", "isEmpty"]
[[], [], [], [1], [], []]
输出:[null,null,null,null,null,true]
说明:栈中的元素数目在[0, 5000]范围内 。
解题思路分析1、双栈;时间复杂度O(n) , 空间复杂度O(n)
文章插图
type SortedStack struct { stack []int temp[]int}func Constructor() SortedStack { return SortedStack{}}func (this *SortedStack) Push(val int) { for len(this.stack) > 0 && val >= this.stack[len(this.stack)-1] {this.temp = append(this.temp, this.stack[len(this.stack)-1])this.stack = this.stack[:len(this.stack)-1] } this.stack = append(this.stack, val) for len(this.temp) > 0 {this.stack = append(this.stack, this.temp[len(this.temp)-1])this.temp = this.temp[:len(this.temp)-1] }}func (this *SortedStack) Pop() { if len(this.stack) == 0 {return } this.stack = this.stack[:len(this.stack)-1]}func (this *SortedStack) Peek() int { if len(this.stack) == 0 {return -1 } return this.stack[len(this.stack)-1]}func (this *SortedStack) IsEmpty() bool { return len(this.stack) == 0}
总结【程序员面试金典03.05_go_栈排序】Medium题目 , 根据题目意思 , 使用双栈 , 核心是:push的时候 , 借助辅助栈来插入数字
- 福利|传阿里员工福利再升级,或全面试行灵活办公及新增育儿假
- 新疆维吾尔自治区|Java程序员应该知道的20个有用的库
- 员工|传阿里员工或全面试行灵活办公及新增育儿假
- 程序员|程序员钱多话少,网恋7个月被骗55万,还是不敌已婚妇女甜言蜜语!
- 程序员|总销量曾高达63万台,火遍全国的太阳能,现在为何不再受欢迎?
- 苹果|曾被美国拒签8次,山东程序员打败谷歌苹果,靠螺丝刀身家涨200亿
- 程序员|5K价位的笔记本是什么样子的,华硕这款好屏、高性能全都有
- 程序员|还在加价考虑YOGA14s?看过灵耀新款后,你就知道双12该买谁了
- Python|中年程序员为啥会失业,失业了出路在哪里
- 程序员|如何在您的编程生涯中跟上当地的生态系统