![](https://img-blog.csdnimg.cn/20201014180756927.png?x-oss-process=image/resize,m_fixed,h_64,w_64)
算法、Leetcode刷题归类
文章平均质量分 78
记录各类常用算法的使用,总结自己的看法,相关leetcode题型的分类
喜欢迈巴赫的将军
忠橙
展开
-
数据结构学习(四)高级数据结构
1>前缀树题目说明实现1268. 搜索推荐系统一眼前缀树我的提交1233. 删除子文件夹使用哈希表存储子前缀树,ref存储在列表中的位置我的提交140. 单词拆分 II前缀树我的提交212. 单词搜索 II对已搜索到的单词剪去,大大降低搜索时间我的提交648. 单词替换前缀树我的提交2>树状数组①普通②离散化题目说明实现315. 计算右侧小于当前元素的个数前缀和我的提交2250. 统计包含每个点的矩形数目前缀和我的提交775. 全局倒置与局部倒置前缀和我的提交327. 区间和的个数。原创 2024-03-05 22:07:21 · 1142 阅读 · 0 评论 -
数据结构学习(三)链表
1> 链表递归修改、查询题目说明实现430. 扁平化多级双向链表设func(l)可以扁平化子链表l,递归修改我的提交2058. 找出临界点之间的最小和最大距离保存某个节点往后的极点中的最大和最小位置,递归查找计算我的提交2074. 反转偶数长度组的节点每次跳到一个组的末尾,看是否要反转下一个组,递归我的提交2095. 删除链表的中间节点参数中记录前面多少节点,返回值记录后面多少节点我的提交2816. 翻倍以链表形式表示的数字dfs修改下一结点,返回是否进位,最后不能漏掉可能新增头结点的情况我的提交。原创 2024-03-04 20:34:07 · 836 阅读 · 0 评论 -
数据结构学习(二)字符串
1> 字符串分割题目说明实现640. 求解方程通过分割字符串统计x的系数和方程的常数项我的提交2> 字符串匹配KMP算法:next数组l++i++} else {i++} else {题目说明实现686. 重复叠加字符串匹配KMP算法,如果直到i>ab长度之和都未匹配成功,则一定无法匹配我的提交210. 课程表 IIKMP算法我的提交3> 字符串问题分类讨论题目说明实现809. 情感丰富的文字使用双指针匹配,分类讨论所有情况我的提交816. 模糊坐标。原创 2024-03-03 12:36:07 · 355 阅读 · 0 评论 -
数据结构学习(一)栈
1> 单调栈,记录数组/区间中的极值, 单调递增栈维护最小值、次小值… 单调递减栈维护最大值、次大值…题目说明实现1438. 绝对差不超过限制的最长连续子数组用单增栈和单减栈分别维护区间的最大最小值(队首),区间不满足要求时尝试从队首移除元素我的提交239. 滑动窗口最大值用单减栈维护窗口的最大值我的提交2> 单调栈,隐含历史信息题目说明实现456. 132 模式从右到左,单调递减栈,k记录上次被pop出去的值,一定有 栈顶 < k我的提交84. 柱状图中最大的矩形。原创 2024-03-02 11:54:16 · 902 阅读 · 0 评论 -
算法学习(十七)动态规划
1> 复杂问题无法一次性状态转移的可以分成多个子问题,分别进行状态转移,最后合并结果, (或者仅对其中一个子问题状态转移)题目说明实现764. 最大加号标志分成四个方向分别求解我的提交838. 推多米诺分成两个个方向分别转移我的提交1031. 两个非重叠子数组的最大和仅对(i:)区间内长度为firstlen和secondLen的最大长度状态转移我的提交1139. 最大的以 1 为边界的正方形分别求解四个方向连续1的个数我的提交1525. 字符串的好分割数目分别求解i左右边不同字符的个数我的提交。原创 2024-03-01 15:31:22 · 979 阅读 · 0 评论 -
算法学习(十六)递归回溯
1> 使用哈希表存储答案,使用mark标记已访问的防止重复搜索,状态较少(<32)时用一个int即可题目说明实现464. 我能赢吗使用int记录已选数字我的提交1387. 将整数按权重排序使用int记录已计算过的我的提交1361. 验证二叉树记录每个节点为根时其下的节点数目,直到等于n我的提交2745. 构造最长的新字符串只要知道每个串剩余数量和前一个串类型,就能唯一确定最大长度,故采用状态压缩dfs我的提交2> 岛屿问题:曼哈顿距离,广度优先搜索,某一性质(边界)扩散,通过更改标记防止重复搜索题目。原创 2024-02-29 09:53:13 · 896 阅读 · 0 评论 -
算法学习(十五)广度优先
1> 拓扑排序,课程表问题每一次都从图中删除没有前驱的顶点,这里并不需要真正的做删除操作,我们可以设置一个入度数组,每一轮都输出入度为 000 的结点,并移除它、修改它指向的结点的入度(−1-1−1即可),依次得到的结点序列就是拓扑排序的结点序列。如果图中还有结点没有被移除,则说明“不能完成所有课程的学习”。1、在开始排序前,扫描对应的存储空间(使用邻接表),将入度为 0 的结点放入队列。原创 2024-02-28 09:49:40 · 346 阅读 · 0 评论 -
算法学习(十四)深度优先
1> 数位DP,求小于N的符合条件的数的个数,注意以下几点:用一个 target数组 存储N的每一位用一个 preLimit 变量表示前面的是否处于临界状态,当且仅当preLimit为true且当前位到达target对应位时,nextLimit为true用一个 pos 表示当前处理到数字的第多少位,pos到len(target)时结束递归题目说明实现788. 旋转数字dp时用preValid表示前面是否已经含有2569我的提交2376. 统计特殊整数。原创 2024-02-27 17:35:16 · 940 阅读 · 0 评论 -
算法学习(十三)多路归并
多路归并题目说明实现313. 超级丑数多路归并我的提交786. 第 K 个最小的质数分数多路归并我的提交1508. 子数组和排序后的区间和多路归并我的提交。原创 2024-02-26 10:23:10 · 513 阅读 · 0 评论 -
算法学习(十二)并查集
1> 合并集合,两个集合有相似的性质,合并二者,以前一个集合的索引作为根。性质map为空对每个集合m, 索引i{如果 m的性质 在 性质map 中 存在, 根为preIdx{i 加入 preIdx}否则{性质map添加新健值对 (m性质, i)题目说明实现947. 移除最多的同行或同列石头相同性质为:两个集合拥有相同的行号或列号,用一个map记录每个行号、列号第一次出现的位置我的提交721. 账户合并。原创 2024-02-25 12:02:11 · 848 阅读 · 0 评论 -
算法学习(十一)拓扑排序
1> 拓扑排序题目说明实现210. 课程表 II拓扑排序我的提交310. 最小高度树拓扑排序我的提交684. 冗余连接拓扑排序我的提交。原创 2024-02-24 20:52:35 · 380 阅读 · 0 评论 -
算法学习(十)数学
1> 位表示信息题目说明实现458. 可怜的小猪共k个时段内检测出结果的信息向量长度 = buckets 的 k+1进制数长度我的提交1558. 得到目标数组的最少函数调用次数减次数 = 二进制1的个数之和,除次数 = 二进制最高位数我的提交1734. 解码异或后的排列偶数和其加1值的异或结果为1,故题中所有数异或结果为1或0,给第一个数初值0,求出所有后续的数,再将所有数都异或真实firstVal我的提交2> 素数查找,最小堆①埃筛法②多路归并题目说明实现313. 超级丑数。原创 2024-02-23 21:35:20 · 843 阅读 · 0 评论 -
算法学习(九)贪心
1> 最需要原则,元素选择问题,贪婪的选择某个最需要被选择的元素题目说明实现621. 任务调度器当前剩下最多的任务最需要被调度我的提交670. 最大交换最靠左的元素最需要被增大,故从左到右遍历到i位置,i右边最大的位置大于i则结果为交换i和该最大的位置我的提交678. 有效的括号字符串左括号最需要被消除,两个栈存放左括号和星号,每次遍历到右括号,优先消除左括号,没有左括号时再消除星号我的提交738. 单调递增的数字左边元素最需要选大的,从左往右遍历到i位置,i后全变为9,i前变为单增的最大形式我的提交。原创 2024-02-21 23:15:59 · 867 阅读 · 0 评论 -
算法学习(八)分治
1> 构造类型,奇偶分治,位分治题目说明实现932. 漂亮数组题意即两数之和不能为偶数,故数组分为偶数部分和奇数部分,因为 偶数 + 奇数!= 偶数我的提交1238. 循环码排列先不考虑start,按最高位为0、1将数据分为左右部分构造,后面再循环移动至start到0位置处我的提交2> 根据条件分解问题题目说明实现889. 根据前序和后序遍历构造二叉树通过前序找到根节点,从而划分后序遍历为左右子树我的提交。原创 2024-02-20 23:56:54 · 341 阅读 · 0 评论 -
算法学习(七)枚举
1> 数组中每个元素做若干种可能的操作,直接枚举, 2的m次方种可能题目说明实现1049. 最后一块石头的重量 II每块石头的重量在前面所有可能重量的基础上要么被加上要么被减去,枚举所有可能2^len(stones)种可能我的提交2> 数组中选择任意个元素,2的m次方中可能,通过 排序,二分查找 优化算法题目说明实现1774. 最接近目标价格的甜点成本每个配料最多2份 等价于 重复两次:在配料表中任取若干份我的提交3> 分类讨论题目说明实现794. 有效的井字游戏。原创 2024-02-18 00:00:17 · 341 阅读 · 0 评论 -
算法学习(六)前缀和
1> 复杂问题求多个子前缀和简化算法过程题目说明实现1664. 生成平衡数组的方案数对奇数位和偶数位分别求前缀和我的提交2> 前缀和➕哈希表解决子数组目标和问题(容斥原理)题目说明实现1074. 元素和为目标值的子矩阵数量容斥原理我的提交1010. 总持续时间可被 60 整除的歌曲容斥原理我的提交1442. 形成两个异或相等数组的三元组数目注意初始值{0:{-1}, arr[0]:{0}}我的提交2001. 可互换矩形的组数可替换的矩形,对应着唯一的最简比例,即组合计数问题,采用用容斥定理解决。原创 2024-02-17 23:57:16 · 363 阅读 · 0 评论 -
算法学习(五)哈希表
1> 原地哈希(题目限制空间复杂度时使用)题目说明实现41. 缺失的第一个正数数值n存到数组中的n-1位置我的提交LCR 120. 寻找文件副本数值n存到数组中的n位置我的提交442. 数组中重复的数据数值n存到数组中的n-1位置我的提交2> 大量无规则数据问题的简化题目说明实现554. 砖墙前缀和的方式记录每块砖的右端点,hash找出最大出现次数的我的提交1711. 大餐计数记录所有数的出现次数,对每个数枚举其对面数的可能性我的提交3> 集合交并/子集题目说明实现。原创 2024-02-16 21:29:13 · 363 阅读 · 0 评论 -
算法学习(四)区间问题
区间问题,就是线段问题,让你合并所有线段、找出线段的交集。两个技巧,画图+排序!原创 2024-02-14 23:24:55 · 351 阅读 · 0 评论 -
算法学习(三)双指针
1> 有序数组采用双指针 合并/查找…题目说明实现4. 寻找两个正序数组的中位数两个数组中有序右移较小的元素指针,直到中点我的提交2> 夹逼定理,右指针负责探索正确解,左指针负责找最优,右指针每轮只移动一格题目说明实现633. 平方数之和想象成二维数组,每一步都只是 排除一行左/一列下 的所有元素,从而不会漏掉目标元素我的提交1234. 替换子串得到平衡字符串某一子串符合条件,则在该子串位置扩展的串也一定可以我的提交1839. 所有元音按顺序排布的最长子字符串利用左右指针找到所有满足的最小区间。原创 2024-02-13 22:42:58 · 790 阅读 · 0 评论 -
算法学习(二)二分查找
1> 有时不能一眼看出来,需要提炼有序部分题目说明实现792. 匹配子序列的单词数记录26个字母分别在s中从前到后出现的位置我的提交1477. 找两个和为目标值且不重叠的子数组因为元素都是>0, 所以前缀和是有序的,求每个位置结尾的子数组为target的长度我的提交1838. 最高频元素的频数排序,要变成i元素的区间的左边界越小,对应的k越大,从而探索最大左边界我的提交483. 最小好进制1的位数固定时,表示的值随着进制的增大而增大,从64到2取位数,二分查找进制判断可行性我的提交962. 最大宽度坡。原创 2024-02-10 22:59:03 · 832 阅读 · 0 评论 -
算法学习(一)排序
1> 通过排序将数组分为左右不同性质的部分,简化运算题目说明实现462. 最小操作次数使数组元素相等 II排序后,操作次数 = 左边增加的值 + 右边减小的值我的提交1996. 游戏中弱角色的数量排序后,从右往左,在每个角色严格右区间内判断,利用dpRightMax记录历史我的提交2> 二重(多重)排序,第一个条件相同时,再通过第二个条件…排序题目说明实现524. 通过删除字母匹配到字典里最长单词双指针法判断是否是子序列我的提交939. 最小面积矩形按层从下往上、从左往右记录所有同层y对我的提交。原创 2024-02-07 22:17:20 · 889 阅读 · 0 评论