
数据结构与算法
文章平均质量分 67
柚子树cc
但行好事 莫问前程
展开
专栏收录文章
- 默认排序
- 最新发布
- 最早发布
- 最多阅读
- 最少阅读
-
多模式字符串匹配 - AC自动机原理及实现
给一个字符串,找出字符串中指定的单词,如果是单个词,我们可以通过暴力解法,从头开始遍历字符串,判断是否存在指定的单词,当然还有一种更优的解法,那就是KMP算法,通过构造next数组,保存匹配的中间状态,在查找单词失败时,不用退回到字符串开头重新进行匹配,实现了O(m+n)的时间复杂度。这种在一个字符串中找一个单词的匹配成为单模式匹配,如果要在一个字符串中寻找多个子串了,那就是将要谈到的多模式匹配,如何实现呢?对每个子串进行KMP匹配,当然也可以。但是有一种更为优秀的多模式匹配算法,那就是AC自动机算法。原创 2022-05-22 18:50:19 · 1043 阅读 · 1 评论 -
二分查找边界问题总结
这篇总结主要是针对刷题过程中的遇到的各种二分的边界问题及常见二分类型,主要是参考了别人的博客思想,自己只是记录下来固定自己的二分模板,几点声明:以下代码均采用闭区间,即[left, right]取中间值采用了位运算,如果边界不能保证不含负奇数,则位操作会有问题,具体可参考:计算机中右移一位和除以二的区别以下的二分算法后面四种类型都是前三种的变形,所以主要理解前三种的思想和边界控制文章目录一、基础版查找 target 是否存在查找大于等于 target 的第一个数查找大于 target 的第一个数二原创 2021-03-13 12:34:00 · 816 阅读 · 0 评论 -
二叉树的递归和迭代遍历-C++版
文章目录1. 前序遍历2. 中序遍历3. 后序遍历4. 层序遍历5. 测试函数// binary_tree.h// 结点struct TreeNode { int val; TreeNode* left; TreeNode* right; TreeNode(int value) : val(value), left(nullptr), right(nullptr) {}};/********************** 二叉树增加结点**********************/原创 2021-03-04 02:00:58 · 135 阅读 · 1 评论 -
10种排序算法C++版
文章目录1. 冒泡排序2. 选择排序3. 插入排序4. 快速排序5. 堆排序6. 归并排序7. 希尔排序8. 计数排序9. 桶排序10. 基数排序测试的main函数各种排序算法复杂度1. 冒泡排序/*(无序区,有序区)。从无序区通过交换找出最大元素放到有序区前端。冒泡排序思路:1. 比较相邻的元素。如果第一个比第二个大,就交换他们两个。2. 对每一对相邻元素作同样的工作,从开始第一对到结尾的最后一对。这步做完后,最后的元素会是最大的数。3. 针对所有的元素重复以上的步骤,除了最后一个。4.原创 2021-03-02 22:30:09 · 401 阅读 · 0 评论