算法
文章平均质量分 83
Ethan-Code
好记性不如烂笔头,加油!
展开
-
【算法总结】堆排序
如何实现堆排序1. 使用 C++ STL派生容器 priority_queue 优先队列2. 自己写一个小根堆两种方式各有好处,STL容器的方法用起来方便,而自己写的灵活性更大,可以自定义实现更多操作。下面介绍一下 priority_queue 在做题的常用方法,以及手撕堆的实现。原创 2022-10-06 16:46:02 · 450 阅读 · 0 评论 -
【算法总结】KMP算法
# 字符串匹配——KMP算法1. 算法原理在暴力匹配过程中,当遇到匹配失败的字符时,暴力法做法是将模式串后移一位,从头开始匹配,直到成功匹配下一位字符。KMP算法的核心思想就是:充分利用模式串自身的信息,在每次匹配失败之后不需要重复匹配之前已经成功匹配的字符,快速定位到下一个需要匹配的字符,从而提高匹配效率。因此,我们需要知道匹配失败后应该回退到哪里继续匹配。而实现这个思想的途径就是计算出模式串的最长相等前后缀,在算法中记录在一个数组中,叫做next[]数组。相比于暴力法遍历文本串和模式串时间复杂原创 2022-04-21 01:52:16 · 440 阅读 · 1 评论 -
【算法总结】二分查找及边界问题
关于整数二分的原理和推导,包括更新区间时的mid的取值什么时候需要写成mid = (r + l + 1) >> 1的探讨,用图解的形式理解搜索下一区间时 l 和 r 左右指针的取值, 避开边界问题。原创 2022-04-11 12:52:50 · 4519 阅读 · 0 评论 -
【算法总结】归并排序及双指针
1. 归并排序——分治# 算法原理归并排序的思想就是分治,先递归分解数组,再合并数组。将数组分解到最小之后,再往上一层两两合并两个有序的数组,最终递归返回的就是一个排好序的数组。递归分解的时间复杂度是O(logn),合并数组的时间复杂度是O(n),因此归并排序的时间复杂度就是O(nlogn)。# 步骤确定分界点mid = (l + r) / 2递归调用左右区间一层层调用到底,从最底层归并归并排序, 合二为一# 如何实现合二为一?合并的基本思路就是双指针算法,比较两个原创 2022-04-10 19:07:20 · 591 阅读 · 0 评论 -
【算法总结】快速排序及边界问题分析
关于快速排序的算法原理和推导,代码模板实现,多个边界问题的具体细节分析。原创 2022-04-10 13:54:16 · 2624 阅读 · 5 评论