ARTS LeetCode 剑指 Offer 09:用两个栈实现队列
继续刷LeetCode,做做脑力运动,今天继续使用go来做开发,随机刷了一道编号为剑指 Offer 09的题:yong liang ge zhan shi xian dui lie lcof,中文名叫用两个栈实现队列,难度:简单。
题目有点简单了,就当熟悉go语言规范了,以后适当跳过easy难度的题,同时看看刷题策略,效率有点偏低了。
官方一共181个case,有几个就是为了测试性能的,先放一个最终结果吧
执行用时 : 284 ms, 在所有 Go 提交中击败了 19.90% 的用户 内存消耗 : 8.3 MB, 在所有 Go 提交中击败了 100.00% 的用户
详细信息参考这里 用两个栈实现队列 - 提交记录 - 力扣 (LeetCode) 。
执行效率不够高。
package main
type Stack []interface{}
func (stack Stack) Len() int {
return len(stack)
}
func (stack Stack) IsEmpty() bool {
return len(stack) == 0
}
func (stack Stack) Cap() int {
return cap(stack)
}
func (stack *Stack) Push(value interface{}) {
*stack = append(*stack, value)
}
func (stack Stack) Top() interface{} {
if len(stack) == 0 {
return nil
}
return stack[len(stack)-1]
}
func (stack *Stack) Pop() interface{} {
theStack := *stack
if len(theStack) == 0 {
return nil
}
value := theStack[len(theStack)-1]
*stack = theStack[:len(theStack)-1]
return value
}
type CQueue struct {
left, right Stack
}
func Constructor() CQueue {
var q CQueue
return q
}
func (this *CQueue) AppendTail(value int) {
var i = this.right.Pop()
for i != nil {
this.left.Push(i)
i = this.right.Pop()
}
this.left.Push(value)
}
func (this *CQueue) DeleteHead() int {
var i = this.left.Pop()
for i != nil {
this.right.Push(i)
i = this.left.Pop()
}
var result = this.right.Pop()
if result == nil {
return -1
}
return result.(int)
}
/**
* Your CQueue object will be instantiated and called as such:
* obj := Constructor();
* obj.AppendTail(value);
* param_2 := obj.DeleteHead();
*/
这个题目不太好本地试验测试用例,暂时略过。
收获
主要是语法上的学习:
- for loop
- type assertion
- stack in golang