算法
文章平均质量分 83
学代码的章北海
这个作者很懒,什么都没留下…
展开
-
【算法训练(day7)】区间和并,离散化数组模板
问题:给定 n个区间 [li,ri],要求合并所有有交集的区间。注意如果在端点处相交,也算有交集。输出合并完成后的区间个数。例如:[1,3][1,3] 和 [2,6][2,6] 可以合并为一个区间 [1,6][1,6]。原创 2023-06-02 17:57:13 · 682 阅读 · 0 评论 -
【算法训练(day6)】双指针模板
通常情况下我们可能会遇到在某些可遍历的集合中寻找满足某种性质的字串或元素。这时候我们采取暴力的思路就会面临多重循环。我们可以利用题目中所给的集合并利用其性质将多重循环降成一重循环。光用语言描述可能不太好理解。接下来看几个双指针典型案例。原创 2023-05-28 16:13:18 · 705 阅读 · 0 评论 -
【算法训练(day3)】快速排序模版选择及不同版本快排对比
目前市面上常用的有两种划分区间,一种是hoare划分另一种是Lomuto划分。常见快速排序实现模版比如挖坑法和经典快速排序就是用的是hoare划分。那么这两种区间划分方式有什么不同呢。先上结论,hoare划分在面对大量重复数据的时候效率会明显好于lomuto划分。当面对大量不同数据的时候两种划分区间相差不大。下面来解释为什么大量重复数据处理效率会有差异。因为lomuto的工作流程是先选定key值,再在数组的一侧初始化两个指针i和j。原创 2023-04-19 23:34:13 · 511 阅读 · 1 评论 -
【算法训练(day5)】前缀和与差分
通常我们要求前缀和的时候题目会给出原始数组,我们需要另一个数组来记录每一个位置的前缀和,我们的前缀和数组记录从开头到当前位置的所有数据的和,用于后续的处理。因为我们前缀和数组内部存放的是从头到当前位置(原数组内)的数据和当我们做差的时候会将范围外的部分剪掉,这样留下的就是从范围起始位置到结束位置的前缀和了。最后对修改后的差分数组求前缀和就能得到修改后的前缀和数组。在一维前缀和的基础上增加一维,原先的前缀和是从左向右计算,二维前缀和是从左上角向右上角计算的矩阵,这时候求的区间和是一个矩阵范围的区间和。原创 2023-05-23 17:50:51 · 775 阅读 · 0 评论 -
【算法训练(day4)】高精度与低精度计算模板
加法其实是比较简单的,我们首先从从低位算起,把较短的那个数按照每一位拆开,从最低位开始依次和较长的数字相加,将每一位的结果加起来就是最终结果,其实就是竖式相加的过程。减法首先我们要让大的数作为被减数,小的数作为减数,通过标记位来判断正负,这样就能用同一段代码处理正数和负数的计算,同样也是从最低位到最高位以此相减,再遇到不够减的情况下,向下一位借10,同时让借位t变成1,证明借走了一位。这点在竖式除法里也有体现,从最高位的每一位开始依次看够不够整除,不够的话就让当前位参与到下一位的计算。原创 2023-05-17 18:52:53 · 129 阅读 · 1 评论 -
【算法训练 (day2)】积木画(dp问题)
小明最近迷上了积木画,有这么两种类型的积木,分别为 I 型(大小为 2 个单位面积)和 L 型(大小为 3 个单位面积):同时,小明有一块面积大小为 2 × N 的画布,画布由 2 × N 个 1 × 1 区域构成。小明需要用以上两种积木将画布拼满,他想知道总共有多少种不同的方式?积木可以任意旋转,且画布的方向固定。原创 2023-04-10 20:38:22 · 830 阅读 · 6 评论 -
【算法训练(day1)】李白打酒加强版(dp问题)
这道题可以用dp求解,因为最后恰好喝完酒,并且没酒的时候遇到花是不合法的,这说明酒的最大数量不能大于花加起来的数量,如果酒的数量大于花的数量在最后就无法将所有的酒喝完,这是一个关键点。这样我们就需要记录下来酒的数量,花的数量,和经历的店的数量。我们可以用一个三维数组来表示,数组内存的是状态数,也就是走到当前位置有多少种方案。原创 2023-04-05 15:37:44 · 1255 阅读 · 5 评论