程序员面试金典03.05_go_栈排序
题目【程序员面试金典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}
总结Medium题目 , 根据题目意思 , 使用双栈 , 核心是:push的时候 , 借助辅助栈来插入数字
- 28岁程序员狂赚上亿,宣布退休:有钱一时爽,一直有钱一直爽
- 用尽全身力气不想加班的机器人,这大概是程序员最后的倔强,哈哈
- Java函数式编码结构-好程序员
- 又是一年1024,程序员:我写的算法不足以控制人类
- 阿里员工哀叹:公务员真好,每一样都完爆程序员,网友:想得真美
- 一个普通本科的安卓程序员如何才能进腾讯,阿里,字节这些大厂?
- 阿里铁军原主帅俞朝翎:阿里面试中的“望闻问切”法
- 印度程序员眼中的中国科技如何?这个观点很刻薄,但却很真实
- 从高级程序员-资深程序员-技术总监,我都为你整理好了学习路径
- IT程序员常去的论坛、社区、网站