随笔分类 - 算法
摘要:如何实现堆排序 使用 C++ STL派生容器 priority_queue 优先队列 自己写一个小根堆 两种方式各有好处,STL容器的方法用起来方便,而自己写的灵活性更大,可以自定义实现更多操作。 下面介绍一下 priority_queue 在做题的常用方法,以及手撕堆的实现。 优先队列堆排序 优先
阅读全文
摘要:# 字符串匹配——KMP算法 1. 算法原理 在暴力匹配过程中,当遇到匹配失败的字符时,暴力法做法是将模式串后移一位,从头开始匹配,直到成功匹配下一位字符。 KMP算法的核心思想就是:充分利用模式串自身的信息,在每次匹配失败之后不需要重复匹配之前已经成功匹配的字符,快速定位到下一个需要匹配的字符,从
阅读全文
摘要:二分查找 二分查找分为整数二分和小数二分,其中整数二分涉及的边界问题比较多,理解起来相对复杂。 # 整数二分 如果可以找到一个性质,可以把区间一分为二,一半满足性质一半不满足。二分可以找到这个性质的边界,可以是①也可以是②。 这里这个分界点①和②就分两种情况讨论。 # 寻找边界点①——右边界 mid
阅读全文
摘要:1. 归并排序——分治 # 算法原理 归并排序的思想就是分治,先递归分解数组,再合并数组。 将数组分解到最小之后,再往上一层两两合并两个有序的数组,最终递归返回的就是一个排好序的数组。 递归分解的时间复杂度是O(logn),合并数组的时间复杂度是O(n),因此归并排序的时间复杂度就是O(nlogn)
阅读全文
摘要:1. 快速排序——分治 # 算法原理: 在给定序列找到一个点x使得x左边区间数都小于x,右边区间数都大于x # 步骤: 确定分界点 随机,可以是第一个数 调整区间 使左边都小于分界点,右边都大于分界点 递归处理左右两段 递归停止的条件if(l >= r) return;即区间里没有数或只有1个数就直
阅读全文

浙公网安备 33010602011771号