栈和队列
栈:-》顺序栈、链式栈
队列:-》普通队列、双端队列、阻塞队列、并发队列、阻塞并发队列
qxlxi
21届本,后端工程师 (专注于Java、Go、数据库、缓存、消息队列、网络、OS、算法、软件设计、DevOps、云原生、大数据、分布式系统架构设计等)
展开
-
【左神算法】栈逆序
1.问题一个栈依次压入1、2、3、4、5,那么从栈顶到栈底分别为5、4、3、2、1。将这个栈转置后,从栈顶到栈底为1、2、3、4、5,也就是实现栈中元素的逆序,但是只能用递归函数来实现,不能用其他数据结构。2.codepackage com.ncst.offer.ch1.offer.ch2;/** * @author i * @create 2020/7/20 18:16 * @Description */public class StackReverse { publ原创 2020-07-20 18:49:38 · 820 阅读 · 0 评论 -
【每日一题-leetcode】617.合并二叉树
617.合并二叉树合并二叉树难度简单412给定两个二叉树,想象当你将它们中的一个覆盖到另一个上时,两个二叉树的一些节点便会重叠。你需要将他们合并为一个新的二叉树。合并的规则是如果两个节点重叠,那么将他们的值相加作为节点合并后的新值,否则不为 NULL的节点将直接作为新二叉树的节点。示例 1:输入: Tree 1 Tree 2 1 2原创 2020-07-09 12:39:25 · 361 阅读 · 0 评论 -
【左神算法】实现一个栈的逆序,但是只能用递归函数的这个栈本身的操作来实现,而不能用自己申请另外的数据结构
1.题目描述实现一个栈的逆序,但是只能用递归函数的这个栈本身的操作来实现,而不能用自己申请另外的数据结构2.思路&code思路1.栈的逆序,如果不借助任何的数据结构,我们只能依靠递归函数来实现。而这个思路也是不容易想到的。首先,我们需要一个get()函数,每次返回栈底的元素,并在栈中移除。递归函数是一个系统调用栈实现。因此很容易实现。第二个函数,reverse函数,将栈中的元素进行逆序。codepackage com.ncst.algo;import java.util.Stac原创 2020-06-29 21:54:47 · 403 阅读 · 0 评论 -
【左神算法】队列实现栈
队列实现栈/** Initialize your data structure here. */ private Queue<Integer> q; private Integer tail;//记录栈顶元素 public MyStack() { q = new LinkedList<>(); tail = 0; } /** Push element x onto stack. */ pub原创 2020-05-11 17:45:30 · 308 阅读 · 0 评论 -
【左神算法】栈实现队列
栈实现队列思路使用两个栈(一个压入栈,一个弹出栈)实现一个队列。要注意在弹出元素栈的地方要注意栈的变化,每次压入栈中的元素移动到弹出栈时,要全部移动。当弹出栈中有元素的时候,不能从压入栈中移动元素到弹出栈中。code/**使用两个栈(一个压入栈,一个弹出栈)实现一个队列。要注意在弹出元素栈的地方要注意栈的变化,每次压入栈中的元素移动到弹出栈时,要全部移动。当弹出栈中有元素的时候,不能从压入栈中移动元素到弹出栈中。 */ private Stack<Integer> in;原创 2020-05-11 16:52:50 · 316 阅读 · 0 评论 -
【左神算法】包含min函数的栈
min函数的栈思路 思路 使用两个栈 一个栈存储数据 一个栈 存储最小值 push()->data栈直接添加 min去记录当前每次push之后的最小值,并将最小值直接添加到minStack栈中 pop()->dataStack和minStack直接pop 当minStack为null将Integer.MaxValue赋值给minValue 否则的话 将minStack当前栈顶的最小元素赋值给minValuecode cl原创 2020-05-10 18:37:45 · 251 阅读 · 0 评论 -
【左神算法】数组实现队列
数组实现队列思路实现思路:队列的结构是先进先出、last->队尾 fast->队头 size->已有元素 arr->数组 * add() 添加元素 先判断是否超过存储长度 否则size++ last++ 如果last长度超过size 从新开始 * peek()->查看队列头元素 先判断队列是否为空 然后直接arr[fast] * poll()->查看队列尾元素 先判断队列是否为空 然后返回arr[fast] f原创 2020-05-10 18:35:38 · 266 阅读 · 0 评论 -
【左神算法】数组实现栈
数组实现栈思路 数组实现栈 * 思路:栈是一个先进后出结构。比如 1,2,3 pop()第一个数为3 * 我们用size表示数组中已有数的大小。 * push():> 先判断数组是否超过了initSize的大小 添加数据 size++ * pop():> 先判断数组是否为空 然后弹出数据 size-- * peek():>查看栈顶元素 直接返回arr[size-1]; 为什么需要-1 因为在添加数据的时候 * size++原创 2020-05-10 18:34:15 · 331 阅读 · 0 评论 -
【剑指offer】59 - ||队列的最大值
59 - ||队列的最大值面试题59 - II. 队列的最大值难度中等92请定义一个队列并实现函数 max_value 得到队列里的最大值,要求函数max_value、push_back 和 pop_front的均摊时间复杂度都是O(1)。若队列为空,pop_front 和 max_value 需要返回 -1示例 1:输入: ["MaxQueue","push_back","pu...原创 2020-05-06 18:17:48 · 306 阅读 · 0 评论 -
【剑指offer】59.-1 滑动窗口的最大值
59.-1 滑动窗口的最大值面试题59 - I. 滑动窗口的最大值难度简单41给定一个数组 nums 和滑动窗口的大小 k,请找出所有滑动窗口里的最大值。示例:输入: nums = [1,3,-1,-3,5,3,6,7], 和 k = 3输出: [3,3,5,5,6,7] 解释: 滑动窗口的位置 最大值--------------- ...原创 2020-05-03 21:49:14 · 257 阅读 · 0 评论 -
【每日一题-leetcode】98.验证二叉搜索树
98.验证二叉搜索树验证二叉搜索树难度中等513给定一个二叉树,判断其是否是一个有效的二叉搜索树。假设一个二叉搜索树具有如下特征:节点的左子树只包含小于当前节点的数。节点的右子树只包含大于当前节点的数。所有左子树和右子树自身必须也是二叉搜索树。示例 1:输入: 2 / \ 1 3输出: true示例 2:输入: 5 / \ ...原创 2020-04-22 17:51:04 · 310 阅读 · 0 评论 -
【剑指offer】32-3 从上到下打印二叉树 III
32-3 从上到下打印二叉树 III面试题32 - III. 从上到下打印二叉树 III难度中等15请实现一个函数按照之字形顺序打印二叉树,即第一行按照从左到右的顺序打印,第二层按照从右到左的顺序打印,第三行再按照从左到右的顺序打印,其他行以此类推。例如:给定二叉树: [3,9,20,null,null,15,7], 3 / \ 9 20 / \ 1...原创 2020-04-21 21:49:35 · 274 阅读 · 0 评论 -
【剑指offer】32-1 从上到下打印二叉树
32-1 从上到下打印二叉树面试题32 - I. 从上到下打印二叉树难度中等10从上到下打印出二叉树的每个节点,同一层的节点按照从左到右的顺序打印。例如:给定二叉树: [3,9,20,null,null,15,7], 3 / \ 9 20 / \ 15 7返回:[3,9,20,15,7]th:一个队列存储遍历的节点,先存储root结点...原创 2020-04-20 18:18:54 · 324 阅读 · 0 评论 -
【剑指offer】31.栈的压入、弹出序列
31.栈的压入、弹出序列面试题31. 栈的压入、弹出序列难度中等27输入两个整数序列,第一个序列表示栈的压入顺序,请判断第二个序列是否为该栈的弹出顺序。假设压入栈的所有数字均不相等。例如,序列{1,2,3,4,5} 是某栈的压栈序列,序列 {4,5,3,2,1} 是该压栈序列对应的一个弹出序列,但 {4,3,5,1,2}就不可能是该压栈序列的弹出序列。示例 1:输入:pushed ...原创 2020-04-20 17:46:02 · 494 阅读 · 0 评论 -
【剑指offer】30.包含min函数的栈
30.包含min函数的栈面试题30. 包含min函数的栈难度简单12定义栈的数据结构,请在该类型中实现一个能够得到栈的最小元素的 min 函数在该栈中,调用 min、push 及 pop 的时间复杂度都是O(1)。示例:MinStack minStack = new MinStack();minStack.push(-2);minStack.push(0);minStack.p...原创 2020-04-08 10:44:35 · 316 阅读 · 0 评论 -
【每日一题-leetcode】84.柱状图中最大的矩形
84.柱状图中最大的矩形柱状图中最大的矩形难度困难509收藏分享切换为英文关注反馈给定 n 个非负整数,用来表示柱状图中各个柱子的高度。每个柱子彼此相邻,且宽度为 1 。求在该柱状图中,能够勾勒出来的矩形的最大面积。示例:输入: [2,1,5,6,2,3]输出: 101.暴力破解思路两层遍历确定每一层最大的面积,第三层循环确定每次最底的高, j-i+1 长 * 高 求...原创 2020-04-04 17:02:13 · 444 阅读 · 0 评论 -
【每日一题-leetcode】239.滑动窗口最大值
239.滑动窗口最大值滑动窗口最大值难度困难290给定一个数组 nums,有一个大小为 k *的滑动窗口从数组的最左侧移动到数组的最右侧。你只可以看到在滑动窗口内的 *k个数字。滑动窗口每次只向右移动一位。返回滑动窗口中的最大值。进阶:你能在线性时间复杂度内解决此题吗?示例:输入: nums = [1,3,-1,-3,5,3,6,7], 和 k = 3输出: [3,3,5...原创 2020-04-03 16:27:17 · 399 阅读 · 0 评论 -
【每日一题-leetcode】155.最小栈
155.最小栈设计一个支持 push,pop,top 操作,并能在常数时间内检索到最小元素的栈。push(x) – 将元素 x 推入栈中。pop() – 删除栈顶的元素。top() – 获取栈顶元素。getMin() – 检索栈中的最小元素。示例:MinStack minStack = new MinStack();minStack.push(-2);minStack.push...原创 2020-04-01 15:05:03 · 333 阅读 · 0 评论 -
【每日一题-leetcode】 20.有效的括号
20.有效的括号难度简单1475给定一个只包括 ‘(’,’)’,’{’,’}’,’[’,’]’ 的字符串,判断字符串是否有效。有效字符串需满足:左括号必须用相同类型的右括号闭合。左括号必须以正确的顺序闭合。注意空字符串可被认为是有效字符串。示例 1:输入: "()"输出: true//使用栈 public boolean isValid(String s) {...原创 2020-04-01 11:56:09 · 336 阅读 · 0 评论 -
【剑指offer】8.用两个栈实现队列
8.用两个栈实现队列用两个栈实现一个队列。队列的声明如下,请实现它的两个函数 appendTail 和 deleteHead,分别完成在队列尾部插入整数和在队列头部删除整数的功能。(若队列中没有元素,deleteHead 操作返回 -1 )示例 1:输入:[“CQueue”,“appendTail”,“deleteHead”,“deleteHead”][[],[3],[],[]]输...原创 2020-03-30 09:45:54 · 302 阅读 · 1 评论