
算法
文章平均质量分 83
算法学习
闪电麦昆️
共振、杂化、离域、互变,是谁在跃迁?
展开
-
动态规划之二维背包及杂项
二维费用的背包问题、似包非包、卡特兰数原创 2024-11-05 21:36:27 · 741 阅读 · 0 评论 -
动态规划之完全背包
【代码】动态规划之完全背包。原创 2024-11-04 23:29:55 · 1068 阅读 · 0 评论 -
动态规划之01背包
最后一块石头的重量 II思路转换看见字母前的±号我们就想到了上面那个题,转换为将数分为两堆,使a-b最小,我们已知a+ b = sum转换:在数组中选择一些数,使其和接近sum / 2dp[i][j]表示,从前i个元素中选,总和不超过j,此时的最大和状态转移方程:根据第i个元素,分类第i个元素不选,此时第i个元素选,意味要在前i - 1个元素中,选数凑其总和为,前提条件,所以初始化:计算每一行仅需知道上一行,所以只初始化第一行,即没有石头想凑成目标和j的最大和都是,所以填表顺序:从上往下。原创 2024-11-04 17:14:07 · 1336 阅读 · 0 评论 -
动态规划之两个数组的 dp(下)
区间内的所有的子序列中,公共子序列的。初始化:添加了一行和一列,注意下标映射。区间内的字符是否能够交错组成字符串。初始化:引入空串,注意下标映射。初始化:引入空串,注意下标映射。填表顺序:从左往右,从上往下;填表顺序:从左往右,从上往下;状态表示:选第一个字符串的。填表顺序:从上往下,从左往右。状态表示:选第一个字符串的。填表顺序:从上往下,从左往右。的最后一个位置,进行讨论。的最后一个位置,进行讨论。的最后一个位置,进行讨论。区间和第二个字符串的。区间和第二个字符串的。区间内的字符和字符串。原创 2024-11-01 23:26:40 · 1142 阅读 · 1 评论 -
动态规划之两个数组的 dp(上)
状态转移方程:根据根据最后一个位置的元素,来讨论。初始化时,将第一行和第一列的值都设置为。区间内所有的子序列中,最长公共子序列的长度。初始化:引入空串,注意下标的映射,初始化:引入空串,帮助我们初始化。阅读本题后发现和上题解法基本相同。,所以从上往下填,从左往右填。,所以从上往下填,从左往右填。前添加一个空字符,也就是说。区间内的子串中,能否匹配。区间以及第二个字符串。选取选取第一个字符串。原创 2024-11-01 23:12:37 · 976 阅读 · 2 评论 -
动态规划之回文串问题
```dp[i][j]```表示```s```字符串由```i```到```j```是否是```回文子串```原创 2024-10-29 20:43:13 · 673 阅读 · 0 评论 -
动态规划之子序列问题(下)
优化:通过哈希表实现,由于我们只需要遍历一次数组,并对每个元素在哈希表中进行查询和更新。可以连接在这个子序列后,形成一个新的、更长的等差子序列。位置为结尾的所有子序列中,等差子序列的个数。的下标时,可以在填表之前,将所有的。,一边保存离他最近元素的下标,返回值:dp 值中的最大值。状态转移方程:对于每个。绑定在一起放到哈希表中。初始化: 最坏情况为。,所以返回值需要判断。初始化: 最坏情况为。原创 2024-10-27 15:38:15 · 570 阅读 · 0 评论 -
动态规划之子序列问题(上)
排序: 首先,对数对数组按照每个数对的第一个元素进行升序排序。这是为了方便后续动态规划的处理。位置为结尾的所有子序列中最长递增子序列的长度。返回值: 根据状态表达,返回整个。初始化:每个位置都可以构成长度为。初始化:每个位置都可以构成长度为。填表顺序:从左到右两个表一起填。填表顺序:从左到右两个表一起填。位置为结尾的所有子序列中。初始化: 全部初始化为。的递增子序列,因此将。的递增子序列,因此将。填表顺序: 从左往右。原创 2024-10-26 15:25:37 · 1212 阅读 · 0 评论 -
动态规划之子数组系列(下)
状态转移方程:根据最后一个位置的情况来分析,设最后一个单词起始位置为。初始化:前两个位置的元素无法构成等差数列,因此初始化。,这样就没有下标的映射关系的问题了,同时还能处理。表中所有元素的和,但这里需要去重。初始化:每一个元素都能构成湍流数组,所以将。区间内的字符串,能否被字典中的单词拼接而成。当两个区间都满足条件时,即成立;返回值: 返回两个数组中的最大值。填表顺序:从左往右两个表一起填。的数组,统计所有字符结尾的最大。个字母,我们统计以其为结尾的。,此时结尾会有两种状态。,表示空串能够拼接而成。原创 2024-10-26 08:30:00 · 1807 阅读 · 0 评论 -
动态规划之子数组系列(上)
填表顺序:从左往右两个表一起填。填表顺序:从左往右两个表一起填。填表顺序:两个表从左往右。乘积为负数的最长长度。原创 2024-10-24 23:18:14 · 596 阅读 · 0 评论 -
动态规划之简单多状态 dp 问题(下)
天结束后,处于某个状态的最大利润,我们可以细分为,处于“买入”、“可交易”、“”三种状态。天结束后,所能获得的最大利润,这一天有两种状态,“买入”、“卖出”返回值:返回“卖出”状态下最后一天的最大值收益。状态表示:以某个位置为结尾,使用两个数组表示。状态表示:以某个位置为结尾,使用两个数组表示。两个状态,并加上一维表示交易次数。两个状态,并加上一维表示交易次数。返回值:卖出状态下的最大值。填表顺序:从上往下,从左往右。填表顺序:从上往下,从左往右。(防止减法发生越界)(防止减法发生越界)原创 2024-10-24 19:58:27 · 1391 阅读 · 0 评论 -
动态规划之简单多状态 dp 问题(上)
通过分类讨论,将一个环形问题转化为一个。填表顺序:两个表从左向右一起填写。填表顺序:两个表从左向右一起填写。将每个数字的出现的和记录在。当第一个位置不偷的时候,即。当第一个位置偷的时候,即。原创 2024-10-23 23:00:52 · 747 阅读 · 0 评论 -
动态规划之路径问题
初始化:我们在 dp 表的最后一行和最后一列分别添加一行和一列。位置时,此时的最小的下降路径和。位置时,此时的最小的下降路径。填表顺序:从上往下,从左往右。填表顺序:从上往下,从左往右。到达终点,所需的最低健康点数。填表顺序:从下往上,从右往左。初始化:添加了一行和两列,表中最后一行的最小值。原创 2024-10-22 22:35:23 · 979 阅读 · 0 评论 -
动态规划之斐波那契数列
动态规划(Dynamic Programming,简称DP)是一种通过将原问题分解为相互重叠的子问题并仅仅解决每个子问题一次,将其解存储起来,避免重复计算,从而提高效率的算法优化技术。它通常用于求解最优化问题。动态规划的基本思想是利用之前已经计算过的结果,通过递推关系式来计算当前问题的解。原创 2024-10-22 00:08:59 · 817 阅读 · 0 评论 -
记忆化搜索
记忆化搜索。原创 2024-10-19 20:52:04 · 459 阅读 · 1 评论 -
FloodFill 算法(DFS)
FloodFill 算法(DFS)原创 2024-10-19 20:32:32 · 929 阅读 · 0 评论 -
穷举vs暴搜vs深搜vs回溯vs剪枝(四)
解数独。原创 2024-10-16 09:30:00 · 810 阅读 · 0 评论 -
穷举vs暴搜vs深搜vs回溯vs剪枝(三)
字母大小写全排列。原创 2024-10-14 23:22:48 · 788 阅读 · 0 评论 -
穷举vs暴搜vs深搜vs回溯vs剪枝(二)
括号生成。原创 2024-10-14 23:00:53 · 835 阅读 · 0 评论 -
穷举vs暴搜vs深搜vs回溯vs剪枝(一)
找出所有子集的异或总和再求和。原创 2024-10-13 17:48:08 · 1180 阅读 · 0 评论 -
递归——二叉树中的深搜
计算布尔二叉树的值。原创 2024-10-12 17:53:05 · 1792 阅读 · 0 评论 -
递归——链表问题详解
合并两个有序链表。原创 2024-10-12 17:52:35 · 176 阅读 · 0 评论 -
递归——汉诺塔问题详解
在经典汉诺塔问题中,有 3 根柱子及 N 个不同大小的穿孔圆盘,盘子可以滑入任意一根柱子。一开始,所有盘子自上而下按升序依次套在第一根柱子上(即每一个盘子只能放在更大的盘子上面)。请编写程序,用栈将所有盘子从第一根柱子移到最后一根柱子。(2) 盘子只能从柱子顶端滑出移到下一根柱子;(3) 盘子只能叠在比它大的盘子上。所以我们发现,可以利用递归来解决该问题。(1) 每次只能移动一个盘子;柱子上的一堆盘子,借助。原创 2024-10-10 23:44:01 · 769 阅读 · 0 评论 -
算法笔记(十五)——BFS 解决拓扑排序
BFS 解决拓扑排序原创 2024-10-10 07:53:15 · 845 阅读 · 0 评论 -
算法笔记(十四)——多源 BFS
多源最短路问题:多个起点到同一个终点的最短路;原创 2024-10-08 22:03:39 · 561 阅读 · 0 评论 -
算法笔记(十三)——BFS 解决最短路问题
是解决最短路径问题的一种常见算法。在这种情况下,我们通常使用BFS来查找从一个起始点到目标点的最短路径。原创 2024-10-07 23:02:18 · 804 阅读 · 0 评论 -
算法笔记(十二)——BFS 解决 FloodFill(洪水灌溉)
FloodFill(洪水灌溉)本质就是找一块区域里性质相同的联通块原创 2024-10-06 18:09:43 · 506 阅读 · 1 评论 -
算法笔记(十一)——优先级队列(堆)
优先级队列是一种特殊的队列,元素按照优先级从高到低(或从低到高)排列,高优先级的元素先出队,可以用 堆来实现原创 2024-10-05 23:12:41 · 732 阅读 · 0 评论 -
算法笔记(十)——队列+宽搜
>**==BFS是图上最基础、最重要的搜索算法之一;==**>==每次都尝试访问同一层的节点如果同一层都访问完了,再访问下一层==原创 2024-10-05 16:48:03 · 566 阅读 · 0 评论 -
算法笔记(九)——栈
先进后出,其操作主要有。原创 2024-10-04 20:50:44 · 1262 阅读 · 0 评论 -
算法笔记(八)——字符串
【代码】算法笔记(八)——字符串。原创 2024-10-04 16:08:22 · 464 阅读 · 0 评论 -
算法笔记(七)——哈希表
哈希表:一种存储数据的容器;可以快速查找某个元素,时间复杂度O(1);当频繁查找某一个数时,我们可以使用哈希表数组容器。原创 2024-10-03 18:20:43 · 2734 阅读 · 3 评论 -
算法笔记(六)——链表
new head。原创 2024-10-03 15:19:45 · 646 阅读 · 0 评论 -
算法笔记(五)——分治
分治算法字面上的解释是“分而治之”,就是把一个复杂的问题分成两个或更多的相同或相似的子问题,再把子问题分成更小的子问题……分治策略是:对于一个规模为n的问题,若该问题可以容易地解决(比如说规模n较小)则直接解决,否则将其分解为k个规模较小的子问题,这些子问题互相独立且与原问题形式相同,递归地解这些子问题,然后将各子问题的解合并得到原问题的解。归并排序的过程中,元素的下标是会跟着变化的,因此我们需要⼀个辅助数组,来将数组元素和对应的下标绑定在⼀起归并,也就是再归并元素的时候,顺势将下标也转移到对应的位置上。原创 2024-10-02 21:22:33 · 1334 阅读 · 0 评论 -
算法笔记(四)——模拟
模拟算法,根据题目描述一步一步操作,注意细节以及一些数据结构的应用,方便编写代码。原创 2024-10-01 18:12:38 · 565 阅读 · 0 评论 -
算法笔记(三)——前缀和算法
前缀和可以简单理解为「数列的前 n 项的和」,是一种重要的预处理方式,能大大降低查询的时间复杂度原创 2024-10-01 16:41:35 · 845 阅读 · 0 评论 -
算法笔记(二)——二分查找算法
在排序数组中查找元素的第一个和最后一个位置题目说明时间复杂度为O(logN)即让我们使用二分判断数组是否为空,如果为空,则直接返回 {-1, -1},表示目标元素不存在于数组中二分两次分别找左端点、右端点寻找左端点以左边界划分的两个区间的特点左边区间的特点都是小于x的右边区间(包括左边界)都是⼤于等于x的当mid落在的时候,也就是;说明都是可以舍去的,此时更新left到mid + 1的位置,继续在上寻找左边界当mid落在的时候,也就是;说明都是可以舍去的,此时更新right到mid。原创 2024-09-21 16:12:17 · 1046 阅读 · 0 评论 -
算法笔记(一)——双指针
双指针(快慢指针、对撞指针)原创 2024-09-18 22:09:05 · 803 阅读 · 0 评论 -
滑动窗口(一)
滑动窗口例题原创 2024-02-05 15:18:59 · 434 阅读 · 0 评论 -
滑动窗口(三)
滑动窗口(三)原创 2024-02-15 21:50:20 · 437 阅读 · 0 评论