随笔分类 - 计算机算法
摘要:链表及模板 1.注意事项 这里讲述的都是用数组来模拟链表。为什么要用数组来模拟链表呢?原因如下: 1. 数组相比于之前所学的动态创建链表,效率更高。 2. 用数组实现更加简洁,操作简单。 因此,这里采用数组来模拟链表,模拟单链表和双链表两种。 2.单链表和双链表的应用 1. 单链表主要用来表示邻接表
阅读全文
摘要:区间合并及模板 1. 区间合并的应用 假设,我们拥有很多区间,我们需要将有交集的区间合并成为一个区间。类似于这样的问题就叫做区间合并问题。请看上图: 区间合并算法就是要尽可能快的完成上述操作。 区间合并算法有时会需要处理一下边界问题,这种情况需要具体问题具体分析。边界问题指的就是当两个区间只有端点重
阅读全文
摘要:离散化及模板 1.离散化的定义及问题引出 在讲解之前,需要注意:我们这里的离散化特指整数离散化,而且是有序(保序)的离散化。这里的有序指的就是原数组A是有序的。保序指的就是原数组A被离散化之后,顺序不发生变化。 在提出上述内容后,我们来阐述一下离散化的定义。假如有这样的一个应用场景:我们需要将10的
阅读全文
摘要:位运算及模板 1.位运算的问题引出及解决方案 关于位运算,有两个常见问题。 1. 给定一个数n,对于n的二进制表示,求其第k位是几。(注意:k是从0开始编号)。 2. 编写一个函数lowbit(x),返回x的二进制表示的最后一位1(这里的x为正数/负数/0均可)。 例如: x = 1010 lowb
阅读全文
摘要:双指针算法及模板 1.第一类双指针算法 第一类双指针算法指的就是: 有两个序列A和B,同时有两个指针i和j。使得i指向其中一个序列,j指向另外一个序列。典型的应用就是在归并排序当中,将两个序列按照某一个规则进行排序时(从小到大或从大到小),使用的就是双指针算法。 2. 第二类双指针算法 第二类双指针
阅读全文
摘要:差分及模板 1.差分的定义及问题引出 给定一个数组:A = a1,a2,...,an 现在构造一个数组B = b1,b2,...,bn,使得: ai = b1+b2+...+bi 那么B就是A的差分。 根据前缀和的定义,我们发现:差分就是前缀和的逆运算。 根据上述定义,引出两个问题: 1. 如何构造
阅读全文
摘要:前缀和及模板 1. 一维前缀和数组定义及问题引出 假设我们拥有原数组:A = a1,a2,a3,...,an 那么,前缀和数组可以定义为:Si = a1+a2+...+ai(即:原数组中前i个数相加所构成的数组) 根据上述的定义,我们可以引出如下问题: 1. 如何求Si? 2. 前缀和数组的作用?
阅读全文
摘要:二分法及模板 1. 种类介绍 二分法按照适用的类型不同,可以分为:整数二分和浮点数二分。不同的类型,模板也各不相同。下面会分情况进行讨论。 2. 二分法的本质 二分法的本质并不在于单调性。如果某个问题具有单调性的性质,那么这个问题一定可以用二分法来解决。如果某个问题利用了二分法来解决,这个问题不一定
阅读全文
摘要:归并排序及模板 1.思想 归并排序也是基于分治法的思想。 1. 确定分界点(一般为中间点mid=(l+r)/2)使得整个数组被划分为left和right区间。 2. 递归排序left和right区间。 3. 归并-合二为一。进而将整个数组排序完成。(注意:在归并的时候,left和right区间都应该
阅读全文
摘要:快速排序及模板 1. 思想 快速排序是基于分治法的思想。首先给定一组数,使用快速排序对其进行排序的话,过程如下: 1. 确定分界点:q[l],q[(l+r)/2],q[r]或者随机都可以 2. 调整区间:如果我们以x为分界点的话,之后我们将区间分为两半。注意,这两半未必长度相等。使得左区间里面的数都
阅读全文
摘要:动态规划-区间DP 1. 区间DP的概念 区间DP,顾名思义就是在一个个的区间上进行DP。 2. 区间DP问题-石子合并 https://www.acwing.com/problem/content/284/ 我们还是从动态规划的两个角度来阐述该问题。 1. 状态表示 本问题,我们可以用二维状态来表
阅读全文
摘要:贪心算法-区间问题 1. 区间选点问题概述及示例 https://www.acwing.com/problem/content/907/ 上图为区间选点问题的示例。 如上图所示:黑色为数轴,蓝色为区间,红色为选择的点。若满足题目要求,最少应选两个点。 2. 区间选点问题步骤 1. 将每个区间按照右端
阅读全文
摘要:贪心算法-Huffman树 1. 哈并果子问题的概述及案例 https://www.acwing.com/problem/content/150/ 上图为本问题的案例。 实际上,本题就是霍夫曼树的应用。关于霍夫曼树的定义,这里就不再赘述。 根据上图,实际上这道题就是在询问:将所有的果子堆进行合并,构
阅读全文