
算法
文章平均质量分 94
算法
knoci
Hello World!
展开
-
【算法】-单调队列
说到单调队列,其实就是一个双端队列, 顾名思义,单调队列的重点分为「单调」和「队列」。「单调」指的是元素的「规律」——递增(或递减)。「队列」指的是元素只能从队头和队尾进行操作。其内部元素在队列内维持单调特性(递增或递减),类似单调栈,但是与单调栈FILO不同的是队列的FIFO的特性,配合滑动窗口的思想,可以解决区间内最值的问题。原创 2024-09-13 19:33:31 · 1137 阅读 · 0 评论 -
【算法】-单调栈
单调栈是栈数据结构的一种变形,在满足栈先进后出(FILO)的条件下,还要满足栈内元素遵循单调性。比如从栈底到栈顶元素保持递增的单调递增栈。原创 2024-04-14 20:51:30 · 1517 阅读 · 1 评论 -
【算法】-扫描线
在计算几何中,扫描线算法(scan line algorithm)一般用来解决几何图形的面积交并,周长交并问题,扫描线算法的核心思想是利用扫描线(通常是水平线或垂直线)在几何空间中“扫描”对象,以确定哪些对象与扫描线相交。下面我们就来通过求矩形的面积并来介绍扫描线算法。先来看看怎么求下面图形的面积并:传统算法是两个矩形面积相加减去重合的面积:但是这样算非常的耗费时间,因为每个矩形都需要两两配对,查看互相之间是否有交集。那么我们接下来就想着把矩形分成三部分:于是现在就变成了。原创 2024-05-30 22:39:06 · 4219 阅读 · 2 评论 -
【算法】-动态规划之01背包和完全背包
有N件物品和一个最多能被重量为W的背包。第i件物品的重量是weight[i],得到的价值是value[i]。每件物品只能用一次,求解将哪些物品装入背包里物品价值总和最大。这是标准的背包问题,一开始我们可以尝试暴力的解法,每一件物品其实只有两个状态,取或者不取,所以可以使用回溯法搜索出所有的情况,那么时间复杂度就是O(2^n),这里的n表示物品数量。所以暴力的解法是指数级别的时间复杂度。进而才需要动态规划的解法来进行优化!在下面的讲解中,我举一个例子:背包最大重量为4。物品为:重量 价值。原创 2024-05-12 22:11:54 · 883 阅读 · 0 评论 -
【算法】-并查集
并查集是一种树形的数据结构,我们可以使用它来进行集合上的合并与查询等问题。合并:将两个集合合并成一个集合。查询:确定某个元素处于哪个集合。如图,{3,1,2,4,0,10}{3,1,2,4,0,10} 表示一个集合,{5,7,8,11}{5,7,8,11} 表示另一组集合。可以看出并查集是多叉树结构,我们用根节点来表示这个根节点所在的集合(即根节点作为集合的"代表元素")。原创 2024-05-07 19:49:04 · 2534 阅读 · 0 评论 -
【算法】-KMP算法
KMP 是一个解决模式串在文本串是否出现过,如果出现过,最早出现的位置的经典算法。Knuth-Morris-Pratt 字符串查找算法,简称为 “KMP 算法”,常用于在一个文本串 S 内查找一个模式串 P 的出现位置,这个算法由Donald Knuth、Vaughan Pratt、James H. Morris 三人于 1977 年联合发表,故取这 3 人的姓氏命名此算法。原创 2024-04-14 20:33:20 · 634 阅读 · 1 评论 -
【算法】-前缀和与差分
那么就可以把 preSum 的公式统一为,此时的 preSum[i] 表示 nums 中 iii 元素左边所有元素之和(不包含当前元素 iii)。下面以 [1, 12, -5, -6, 50, 3] 为例,用动图讲解一下如何求 preSum。原创 2024-04-19 17:22:00 · 706 阅读 · 1 评论 -
【算法】-动态规划之线性DP股票问题
动态规划(Dynamic Programming),简称DP,是一种将一个复杂问题分解为多个简单的子问题求解的方法。将子问题的答案存储在记忆数据结构中,当子问题再次需要解决时,只需查表查看结果,而不需要再次重复计算,因此节约了计算时间。国外知乎 Quora 上一个帖子问应该怎样给四岁的孩子解释什么是动态规划,其中一个非常经典的回答如下:动态规划通常基于一个递推公式和一个或多个初始状态。当前问题的解可以分解为多个子问题解得出。使用动态规划只需要多项式时间复杂度,因为比回溯法和暴力法快很多。原创 2024-04-17 22:47:42 · 994 阅读 · 1 评论