抱歉,您的浏览器无法访问本站
本页面需要浏览器支持(启用)JavaScript
了解详情 >

特性单调栈是一种特殊的栈数据结构,它满足元素的单调性(单调递增或单调递减)。与普通栈相比,单调栈在出栈时有一定的规则,使得出栈后栈中的元素仍然保持单调性。 单调栈主要有两个操作:入栈和出栈。入栈时,先判断栈顶元素是否符合单调性,如果不符合,则将其弹出,一直重复此过程直到符合单调性后再入栈;出栈时,弹出栈顶元素即可。 算法应用单调栈在算法中有许多应用,例如在求解 Next Greater El...

6.1 栈6.1.1用两个栈实现一个队列LeetCode No.232 题目描述:请你仅使用两个栈实现先入先出队列。队列应当支持一般队列的支持的所有操作(push、pop、peek、empty): 思路: 两个栈一个栈做队头(出元素),另一个栈做队尾(入元素) 每次push只需要push到尾栈 pop时如果头栈为空则将尾栈全部“倒入”头栈,如果头栈不为空取出栈顶元素返回,否则返回失败(...

4.1 根据前序与中序序列构造二叉树LeetCode No.105 问题描述:根据一棵树的前序遍历与中序遍历构造二叉树。 思路:根据二叉树的前序和中序(或后序和中序)的序列可唯一构造一棵二叉树,必须要有中序。前序遍历的第一个为根节点,找到根节点在中序中的位置,中序左边的节点都是根节点的左子树,右边的同理,然后可以用递归的方式求解。 示例代码: type TreeNode struct &...

3.1 删除单向链表倒数第n个节点LeetCode No.19 问题描述:删除单向链表倒数第n个节点(只遍历一次)Input: head = [1,2,3,4,5], n = 2Output: [1,2,3,5] 思路:两个指针,p1先走n步,然后p1和p2再一起走,当p1到链表结尾,p2就是要删除的节点。注意处理可能删除的是头结点(n=length)或者不...

2.1 大于n/k次的元素LeetCode No.229 题目描述:给一个整数数组,找出所有出现次数大于n/3的元素。Input: nums = [3,2,3]Output: [3] 摩尔投票法: 一般情况一个大小为 n 的整数数组,找出其中所有出现超过 ⌊ n/k ⌋ 次的元素。n/k的众数最多只有k - 1个,原因:假设有k个众数,则...

1.1 字符串移位 问题:将字符的前k个字符移到字符串结尾。Input:“abcde”,2Output:“cdeab” 三步翻转法: 将字符串分为前k位和后(n-k)位两部分,将两部分分别翻转,最后再整体翻转即可。时间复杂度:T = O(n)参考原文 示例代码: // 反转字符串 func reverse(s string) string { runes :=...