![](https://img-blog.csdnimg.cn/20201014180756930.png?x-oss-process=image/resize,m_fixed,h_64,w_64)
LeetCode
文章平均质量分 67
weixin_42187164
这个作者很懒,什么都没留下…
展开
-
KMP算法代码实现
最浅显易懂的 KMP 算法讲解KMP的next数组求法详解KMP 算法能够在O(M+N)时间复杂度内实现字符串的模式匹配问题。其主要思想是使用模式串的最长公共前后缀数组来去除重复判断操作。下面用一个例子介绍如何计算next数组。下面这个例子是kmp算法利用next数组进行求解找出字符串中第一个匹配项的下标原创 2022-12-03 16:06:02 · 141 阅读 · 1 评论 -
实现前缀树
问题描述:给定一个字符串数组,判断这个数组中是否包含某一个字符串word,或判断这个数组是否包含前缀prefix。暴力的实现方法是将给定的字符串word或prefix与字符串数组一一比对,查找到了则返回true,否则返回false。这种情况下的时间复杂度为O(∣S∣n)O(\lvert S \rvert n)O(∣S∣n),空间复杂度O(∣T∣)O(\lvert T \rvert)O(∣T∣)。其中∣S∣\lvert S \rvert∣S∣代表给定字符串长度,nnn代表数组长度,∣T∣\lvert T \原创 2022-03-24 20:49:08 · 70 阅读 · 0 评论 -
单调队列与单调栈(总结及leetcode例题)
文章目录单调队列滑动窗口最大值绝对差不超过限制的最长连续子数组单调栈单调队列单调队列是满足单调性的队列,在插入某个元素前,将队尾不满足单调性的元素出队。维护单调队列的单调性,来解决问题。单调队列和滑动窗口一样,不属于什么特殊的数据结构或编程思想,可以理解成一个解题技巧。滑动窗口最大值只有满足在当前窗口下,其右边没有比这个元素更大的值这个条件时,元素才在队列中。因此在某一个滑动窗口下,若某个元素不在队列中则意味着其右边有比它更大的值,而滑动窗口是向右滑动的,因此这个不在队列中的元素一定比其右边更大原创 2022-03-24 20:41:31 · 616 阅读 · 0 评论 -
图论经典算法总结及leetcode例题(拓扑排序、并查集、dijkstra、floyd、prim、krustral、bellman-ford)
文章目录广度优先搜索深度优先搜索拓扑排序并查集(Disjoint-set)Dijkstra算法求单源最短路径Bellman-Ford求单源最短路径Floyd求全图最短路径Kruskal算法求最小生成树Prim总结广度优先搜索广度优先搜索可以用来求解无权图的最短路径问题。广度优先搜索每遍历到下一层则路径长度加一,遍历到终点时的路径长度即是问题的解。深度优先搜索深度优先搜索是图中非常基础的算法,回溯法、和拓扑排序都可以通过深度优先搜索完成。深度优先搜索还可以判断图中是否存在环路:记录各个节点的状态,0原创 2022-03-18 22:04:29 · 1531 阅读 · 0 评论 -
二叉树的四种遍历总结(Morris算法总结)
文章目录前序遍历栈Morris中序遍历栈Morris后序遍历栈Morris层序遍历队列总结前序遍历力扣:二叉树的前序遍历栈前序遍历按照 根节点 左子树 右子树 的顺序进行遍历。由于根节点先遍历,因此每次将节点出栈时,按从右到左的顺序将子节点全部入栈,就可以保证按从左到右的顺序遍历所有子树。即前序遍历这种方法可以推广到k叉树的前序遍历class Solution { public List<Integer> preorderTraversal(TreeNode root) {原创 2022-03-14 17:02:34 · 721 阅读 · 0 评论 -
最大子序和的O(n)算法
最大子序和的O(n)算法基本思想:使用一层循环,num记录当前遍历值。sum记录从前方某个位置开始,到当前这个位置的和。ans记录所出现过得所有sum值的最大值,即前方子串的最大值。当sum>0则sum+=num,当sum<=0则sum=num。因为当sum>0时,如果sum+num>0,则当前可以直接加,如果sum+num<=0则说明之前的字串已经对后面没用了,在下次循环时sum就等于num了。当sum<=0说明前面子串对已经没用了,ans已经记录下来了之前子串的最转载 2021-10-19 10:18:31 · 85 阅读 · 0 评论