首页 > 其他分享 >用 Go 剑指 Offer 09. 用两个栈实现队列

用 Go 剑指 Offer 09. 用两个栈实现队列

时间:2023-03-28 15:04:18浏览次数:38  
标签:deleteHead Offer 队列 CQueue 09 outStack len Go inStack

用两个栈实现一个队列。队列的声明如下,请实现它的两个函数 appendTail 和 deleteHead ,分别完成在队列尾部插入整数和在队列头部删除整数的功能。(若队列中没有元素,deleteHead 操作返回 -1 )

 

示例 1:

输入:
["CQueue","appendTail","deleteHead","deleteHead","deleteHead"]
[[],[3],[],[],[]]
输出:[null,null,3,-1,-1]
示例 2:

输入:
["CQueue","deleteHead","appendTail","appendTail","deleteHead","deleteHead"]
[[],[],[5],[2],[],[]]
输出:[null,-1,null,null,5,2]
提示:

1 <= values <= 10000
最多会对 appendTail、deleteHead 进行 10000 次调用

来源:力扣(LeetCode)
链接:https://leetcode.cn/problems/yong-liang-ge-zhan-shi-xian-dui-lie-lcof
著作权归领扣网络所有。商业转载请联系官方授权,非商业转载请注明出处。

type CQueue struct {
    inStack, outStack []int //准备两个栈,一个作为入栈,一个做出栈
}

func Constructor() CQueue {
    return CQueue{}
}

func (this *CQueue) AppendTail(value int)  {
    this.inStack = append(this.inStack, value) //入队操作
}

func (this *CQueue) DeleteHead() int {
    if len(this.outStack) == 0 {
        if len(this.inStack) == 0 { //两个栈都为空,就返回-1
            return -1
        }
        this.in2out() //(第一轮的时候出栈必是空的)出栈为空,入栈有元素则使用in2out函数将入栈的元素倒入出栈
    }
    value := this.outStack[len(this.outStack)-1] //出队的队首元素是出栈的栈尾元素
    this.outStack = this.outStack[:len(this.outStack)-1] //更新出栈的元素
    return value //返回出队的元素值
}

func (this *CQueue) in2out() {
    for len(this.inStack) > 0 {//倒栈前提是入栈不为空
        this.outStack = append(this.outStack, this.inStack[len(this.inStack)-1])//把入栈元素一个个倒进出栈
        this.inStack = this.inStack[:len(this.inStack)-1] //更新入栈
    }
}


/**
 * Your CQueue object will be instantiated and called as such:
 * obj := Constructor();
 * obj.AppendTail(value);
 * param_2 := obj.DeleteHead();
 */

 

标签:deleteHead,Offer,队列,CQueue,09,outStack,len,Go,inStack
From: https://www.cnblogs.com/slowlydance2me/p/17265157.html

相关文章

  • 使用golang+antlr4构建一个自己的语言解析器(完结篇)
    Goland中Antlr4插件在goland中安装Antlr4插件,用于识别输入的字符在在语法文件中生成的语法树的样子,大概就是如下的摸样下载步骤:1.点击文件中的设置选项2.在插件目录......
  • 剑指offer11(Java)-旋转数组中的最小值(简单)
    题目:把一个数组最开始的若干个元素搬到数组的末尾,我们称之为数组的旋转。给你一个可能存在 重复 元素值的数组 numbers ,它原来是一个升序排列的数组,并按上述情形进行......
  • Django用户权限通过Token校验
    最好是将用户权限验证和Token验证放在Django中间件中,以便对所有视图函数进行校验。下面是一段示例代码,演示了如何实现中间件来进行用户权限验证和Token验证middleware.py......
  • MongoDB 2.4企业版分析
    MongoDB2.4企业版分析作者:chszsMongoDBv2.4版于3月19日发布,它引入了内置的文本搜索功能,以及基于哈希的分片和众所期盼的安全特性。同时,10gen公司发布了MongoDB的企业版,它......
  • Google Bard初步评测:与ChatGPT的性能、设计和功能对比分析
    谷歌Bard,搜索巨头对ChatGPT的回应,终于来了。但这值得等待吗?它与网络上涌现的许多其他人工智能聊天机器人相比如何嗯,第一个很容易回答。根据我们的初步印象,谷歌决定在它......
  • [Algorithm] Dynamic programming - 01 - Drawing 2-d matrix
    Problem:LevenshteinDistanceWriteafunctionthattakesintwostringsandreturnstheminimumnumberofeditoperationsthatneedtobeperformedonthefir......
  • MongoDB 2.2.1发布
    作者:chszsMongoDBv2.2.1版发布。这一版没有增加新功能,而是修复了一些MongoDB在2.2.0版上发现的Bug。官方推荐所有MongoDB用户升级数据库。MongoDBv2.2.1版中值得注意的修......
  • mysql数据迁移mongodb
    现在准备把mysql数据迁移到mongodb,上网搜索了一些资料,上了mongodb的官网看了,在window下有一个mongodb客户端工具,可以直接把数据迁移到mongodb,并且非常简单工具名..Mong......
  • Google搜索产品经理:搜索仍有很大的创新和发展空间
    【编者按】本文作者DrewOlanoff是TechCrunch的网站编辑,有着丰富的工作经验,市场营销、客户服务、客户关系管理、产品管理、技术支持等等方面都有涉足,他称自己为“连线者”,工......
  • Android、苹果logo背后的故事
    很多设计菜鸟刚刚学校毕业,幻想着自己设计出苹果、Android那样的图标,然后一夜成名,但是历史的真相并不光鲜的,不管是对已有logo进行加工还是设计重新上架的品牌logo,现实比......