LeetCode(集合)队列和栈的相互实现 golang

手写!!!

225. 用队列实现栈

使用队列实现栈的下列操作:

push(x) – 元素 x 入栈
pop() – 移除栈顶元素
top() – 获取栈顶元素
empty() – 返回栈是否为空
注意:

你只能使用队列的基本操作-- 也就是 push to back, peek/pop from front, size, 和 is empty 这些操作是合法的。
你所使用的语言也许不支持队列。 你可以使用 list 或者 deque(双端队列)来模拟一个队列 , 只要是标准的队列操作即可。
你可以假设所有操作都是有效的(例如, 对一个空的栈不会调用 pop 或者 top 操作)。

type MyStack struct {Items []int
}/** Initialize your data structure here. */
func Constructor() MyStack {return MyStack{ Items:[]int{} }
}/** Push element x onto stack. */
func (this *MyStack) Push(x int) {this.Items = append(this.Items, x)
}func (this *MyStack) Pop() int {if this.Empty() {return 0}temp := this.Items[len(this.Items)-1]this.Items = this.Items[0 :len(this.Items) -1]return temp
}/** Get the top element. */
func (this *MyStack) Top() int {if !this.Empty() {return this.Items[len(this.Items) - 1]}return 0
}/** Returns whether the stack is empty. */
func (this *MyStack) Empty() bool {if len(this.Items) <= 0 {return true}return false
}

面试题09. 用两个栈实现队列

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

type CQueue struct {//栈in负责输入,栈out负责从头输出in []intout []int
}func Constructor() CQueue {return CQueue{//为两个栈预申请空间,减少内存消耗make([]int,0,5),make([]int,0,5),}
}func (this *CQueue) AppendTail(value int)  {if value<1 && value>10000{return }else{this.in = append(this.in[:], value)}
}

核心代码

常规逻辑


func (this *CQueue) DeleteHead() int {// 两个栈都为空if len(this.out) == 0 && len(this.in) == 0 {return -1}// out 栈为空,依次弹出 in 栈栈顶元素,入 out 栈if len(this.out) == 0 {for len(this.in) > 0 {lastIndex := len(this.in) - 1popValue := this.in[lastIndex]this.in = this.in[:lastIndex]this.out = append(this.out, popValue)}}// 弹出 out 栈顶元素lastIndex := len(this.out) - 1popValue := this.out[lastIndex]this.out = this.out[:lastIndex]return popValue
}

另一种解法


func (this *CQueue) DeleteHead() int {//情况1:无人进栈if len(this.in)==0{return -1}//情况2:出入相等if len(this.in)==len(this.out){return -1}// 这个写法输出正确答案,但并没有改变原栈的值out:=this.in[len(this.out)]this.out=append(this.out[:],this.in[len(this.out)])return out
}

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/382070.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

教主们:虽然这道题我不会,但Ac还是没问题的。

wywcgs&#xff1a;亦称Lord Wu&#xff0c;俗名吴垠&#xff0c;2009级厦门大学智能科学与技术学院研究生&#xff0c;本科就读于哈尔滨工业大学。因其深厚的算法功底与独到的思维方式&#xff0c;被尊为“吴教主”&#xff0c;至今声威犹存。2006年起参加ACM/ICPC竞赛&#x…

vector中find和find_if的用法

今天郁闷写大作业中。唉。。每次写都tm暴力遍历。有stl你用毛遍历啊。现在记下来。再遍历就剁手吧。&#xff08;- -!&#xff09; stl包括容器、迭代器和算法&#xff1a; 容器 用于管理一些相关的数据类型。每种容器都有它的优缺点&#xff0c;不同的容器反映出程序设计的不同…

LeetCode 20. 有效的括号 golang(三)

20. 有效的括号 这个题做了三次&#xff0c;前两次的解法现在觉得是算不得正确的。 看的多写得少 做的多总结少 给定一个只包括 ‘(’&#xff0c;’)’&#xff0c;’{’&#xff0c;’}’&#xff0c;’[’&#xff0c;’]’ 的字符串&#xff0c;判断字符串是否有效。 有效…

引用 Map 数据结构的排序问题

用过map吧&#xff1f;map提供一个很常用的功能&#xff0c;那就是提供key-value的存储和查找功能。例如&#xff0c;我要记录一个人名和相应的存储&#xff0c;而且随时增加&#xff0c;要快速查找和修改&#xff1a; 岳不群&#xff0d;华山派掌门人&#xff0c;人称君子剑 …

LeetCode(合集)括号 golang

LeetCode&#xff08;合集&#xff09;括号 20. 有效的括号 golang&#xff08;三&#xff09; 22. 括号生成 golang 图解

一些oj的返回结果:通过结果找错误,debug。

Waiting&#xff1a;你的程序刚刚提交&#xff0c;正在等待OJ评测你的程序。Compiling&#xff1a;OJ正在编译你的程序。Accepted&#xff1a;OK!你的程序是正确的 ^_^。Wrong Answer&#xff1a;你的程序运行的结果和正确结果不同。状态页面CASE那一览显示的是你的程序在第几个…

LeetCode 128. 最长连续序列 golang

128. 最长连续序列 【困难】 给定一个未排序的整数数组&#xff0c;找出最长连续序列的长度。 要求算法的时间复杂度为 O(n)。 示例: 输入: [100, 4, 200, 1, 3, 2] 输出: 4 解释: 最长连续序列是 [1, 2, 3, 4]。它的长度为 4。 Code // 解题思路 // 将所有nums中元素录入n…

inline内联函数的优缺点

优点&#xff1a;1&#xff09;inline定义的内联函数&#xff0c;函数代码被放入符号表中&#xff0c;在使用时进行替换&#xff08;像宏一样展开&#xff09;&#xff0c;效率很高。2&#xff09;类的内联函数也是函数。编绎器在调用一个内联函数&#xff0c;首先会检查参数问…

LeetCode 88. 合并两个有序数组 golang

88. 合并两个有序数组 给你两个有序整数数组 nums1 和 nums2&#xff0c;请你将 nums2 合并到 nums1 中&#xff0c;使 nums1 成为一个有序数组。 说明: 初始化 nums1 和 nums2 的元素数量分别为 m 和 n 。 你可以假设 nums1 有足够的空间&#xff08;空间大小大于或等于 m …

为什么不能在子类的初始化列表里初始化父类的成员

好几次遇到此类问题了&#xff1a;便不得不找些资料弄明白它&#xff1b;具体代码是&#xff1a;2345678910classA{protected:intn_;};classB:publicA{public:B():n_(0){}};这是简化的&#xff0c;作为分析问题的。然后无情的报错&#xff1a;|error: class B does not have an…

LeetCode (合集)合并链表和数组

LeetCode 88. 合并两个有序数组 golang LeetCode 21. 合并两个有序链表 golang 合并两个有序链表并去重 /*** Definition for singly-linked list.* type ListNode struct {* Val int* Next *ListNode* }*/ func mergeTwoLists(list1 *ListNode, list2 *ListNode) *…

一些好的习惯

无论你是业余的还是专业的程序员&#xff0c;正确的编程风格&#xff0c;不但有助于提升软件产品的功能&#xff0c;还可以明显减少软件灾难的产生。今天&#xff0c;我们就来探讨一下有助于我们获取更佳编程风格的一些最好的规则。代码的可读性至上代码要能可阅读和可理解&…

循环链表的反转

206. 反转链表 func reverseList(head *ListNode) *ListNode {if head nil || head.Next nil {return head}p : reverseList(head.Next)head.Next.Next headhead.Next nilreturn p }循环链表的反转 func reverse(head, key *ListNode) *ListNode {if head.Next key {ret…

英语“作弊”技巧!

和大家分享个更精辟的 无须复习&#xff0c;只要十天英语四级就能过&#xff01;&#xff01;&#xff01;方法让你喷血&#xff01;&#xff01;怕以后找不到!!! 1、听力&#xff0c;有三种题型&#xff0c;dialogue(十个对话)&#xff0c;passage(三个短文)&#xff0c;compo…

程序猿不能错过的十部电影

不同的行业领域中很多时候都分享着共同的思想和理念。比如&#xff0c;大量的计算机编程中涉及到的概念都被运用到了电影里。有些概念出现在电影里后变得如此之酷&#xff0c;甚至反过来能帮助我们程序员更好的理解这些概念。下面就是小编最喜欢的10大电影&#xff0c;它们都在…

Redis运维和开发学习目录

Redis运维和开发学习笔记-全书思维导图 Redis运维和开发学习笔记(1) Redis简介 Redis运维和开发学习笔记(2) redis持久化 Redis运维和开发学习笔记(3)redis搭建集群 Redis运维和开发学习笔记(4) Redis参数意义 Redis运维和开发学习笔记(5) 主从复制和sentinel哨兵模式 Re…

刘汝佳训练指南——数论专题知识点总结:

数论是一个神奇的东西&#xff0c;各种结论都很经典&#xff0c;有些懂&#xff0c;有些自己还不是很懂。接下来就一个一个的介绍吧。第一、素数&#xff0c;素数本身就是一个很让人惊奇的数&#xff0c;因为它代表的是唯一&#xff0c;自己就有连个因数&#xff0c;一个是1&am…

第一次训练赛的相关总结和教训!

没有想到时间会不够用&#xff01;这是来到这里的真实感受&#xff0c;每天不停歇地看电脑&#xff0c;资料&#xff0c;刷题&#xff01;几乎没有停下过&#xff0c;有点喘不过气来&#xff0c;不过身体却有一种莫名的兴奋&#xff01; 不喜欢拖拉的人&#xff0c;可自己又总是…

goland中grpc的安装

go modules https://github.com/goproxy/goproxy.cn/blob/master/README.zh-CN.md go env -w GO111MODULEongo env -w GOPROXYhttps://goproxy.cn,direct安装 gRPC 网络环境允许的同学安装 gRPC 非常方便&#xff0c;直接执行以下命令即可安装完成&#xff1a; go get -u -v…

uva11029 - Leading and Trailing

11029 - Leading and TrailingTime limit: 3.000 seconds http://uva.onlinejudge.org/index.php?optioncom_onlinejudge&Itemid8&category115&pageshow_problem&problem1970Apart from the novice programmers, all others know that you can’t exactly rep…