lc
文章平均质量分 81
cxy_hust
这个作者很懒,什么都没留下…
展开
-
滑动窗口2[lc]
priority_queue经常用 或者st、edhttps://leetcode.cn/problems/constrained-subsequence-sum/1499findMaxOfEquationInVec 满足不等式的最大值1 题目https://leetcode.cn/problems/max-value-of-equation/1610visiblePoints 可见顶点的最大数目1 题目https://leetcode.cn/problems/maximum-number-of原创 2022-07-10 11:12:52 · 272 阅读 · 0 评论 -
lc回溯1
回溯的思想在于回这个字,以最经典的八皇后作为例子:当然,回溯也有当前搜索的解空间的情况,比如对于棋盘就是目前已经放置的所有的位置,可以使用记忆化搜锁下面的题目中0698就使用了https://leetcode.cn/problems/partition-to-k-equal-sum-subsets/1 解题思路:2 1.2的时机例子如下:典型的多余的for循环:1取到1,2取到2,那么当最外层的2取到2,1又取到1,那不就是重复计算了嘛标准的带有返回值的写法:我写的回溯不喜欢带返回值,后面是带有返回原创 2022-07-04 20:58:47 · 205 阅读 · 0 评论 -
trajan 塔杨算法 求割点,割边
t[i][j]原创 2022-06-21 12:47:11 · 217 阅读 · 0 评论 -
dijstra迪杰斯特拉算法
t[i][j]原创 2022-06-21 12:46:29 · 181 阅读 · 0 评论 -
杨氏矩阵(young table)
t[i][j]原创 2022-06-16 17:43:40 · 160 阅读 · 0 评论 -
二分搜索1
二分原创 2022-06-11 14:23:10 · 122 阅读 · 0 评论 -
lcBFS1 题集
1 BFS最关键的是:- bfs本身的特性,一个是按照层数往下遍历,一个是可以决定是否遍历完当前层再往下遍历- bfs的队列初始化即为bfs的搜索起点,然后注意状态问题,当每个节点带有状态以后,bfs的visited变量就不仅仅是node的编号,应该是node的编号 + “当前状态”,具体参考(0864,0847)- 注意:遍历当前层,需要把size记录成临时变量,因为curLevel会加入新元素- 注意:入队后就需要置为visited,否则可能重复入队bfs的遍历本质上可以看成当前点,到所有后原创 2022-05-30 13:15:32 · 277 阅读 · 0 评论 -
lc 动态规划[含有一个记忆化搜索]
1 动态规划从背包问题开始:https://zhuanlan.zhihu.com/p/93857890区间dp等等:https://oi-wiki.org/dp/interval/最重要的是,能够用dp数组,1到3维度一般,去表示最终结果,对于具体的题目,dp[i][j]表示什么意思,将成为解答的关键很多动态规划都可以使用带记忆化的搜索去做2 例题0410splitArrayMinMax 分割出最小的子数组最大值1 题目https://leetcode-cn.com/problems原创 2022-03-20 19:23:51 · 1478 阅读 · 0 评论 -
algoHierHolzerEulerPath - 半欧拉图/欧拉图的欧拉路径计算
1 欧拉图基本概念:圈:任选图中一个顶点为起点,沿着不重复的边,经过不重复的顶点为途径,之后又回到起点的闭合途径称为圈。欧拉路径:通过图中所有边一次且仅一次遍历所有顶点的路径称为欧拉(Euler)路径;欧拉回路:通过图中所有边一次且仅一次行遍所有顶点的回路称为欧拉回路;欧拉图:具有欧拉回路的图称为欧拉图;半欧拉图:有欧拉路径但没有欧拉回路的图称为半欧拉图。欧拉图与半欧拉图的判定:G是欧拉图 ⇔ G中所有顶点的度均为偶数 ⇔ G是若干个边不重的圈的并。G是半欧拉图原创 2022-03-07 15:41:51 · 1114 阅读 · 0 评论 -
lcDFS1 深度优先遍历1[记忆化搜索]
1 深度优先遍历最常见的优化:1 记忆化搜索: 使用hash记录遍历起点对应的值,然后直接从hash中获得,避免重复计算2 常见算法:对于欧拉图和半欧拉图算欧拉路径:hierholzer算法2 例子0332HierholzerToFindEulerPath 找欧拉路径1 题目https://leetcode-cn.com/problems/reconstruct-itinerary/2 解题思路hierholzer算法参考:https://www.geeksforgeeks.原创 2022-03-07 15:38:39 · 345 阅读 · 0 评论 -
有序集合 1[set][map][priority_queue]
1 有序集合泛指set, map, pirority_queue等能够按照key进行排序,然后使用lower_bound和upper_bound来进行log(n)复杂度查询的基础数据结构(注意priority_queue仅能够在堆顶进行操作)示例如下: set<int, std::less<int>> spareServers;<被作者省略> // request distribute, find the server原创 2022-02-22 16:25:51 · 714 阅读 · 0 评论 -
单调栈 题集 1 [Monostack]
title: lcMonostack - 单调栈date: 2022-01-12 14:07:18tags:lcalgoPraccatogories:lcalgoPrac单调栈其基本特性:1 单调栈的极值性质:单调递减栈的第一个字符为目前最大的元素,单调递增栈则相反; 关于目前的解释,由于单调栈是遍历整个数组出栈入栈的过程,假设目前遍历到节点i,则arr[:i]为目前单调栈遍历过的元素们,单调栈递增递减栈的第一个数字分别为arr[:i]的最大最小值2 单调栈的单调性:单调栈内.原创 2022-01-12 14:23:31 · 436 阅读 · 0 评论 -
字典树&前缀树 1 [Trie]
1 字典树、前缀树、Trie将一个单词列表使用words组装起来,实现如下:(仅含有小写的字典),可以在log(m)时间内查询一个单词是否在字典中。1.1 可能的小技巧1 一些可以想到的优化:1.1 如果对一个长串反复查询,则使用一个node指针指向当前查询位于Trie里面的位置,避免反复查询相同的前缀1.2 如果对一个长串反复查询,尝试使用hash记录尾串的目标信息,避免对尾串反复查询1.3 逆序建树,构建后缀树等等,见本篇最后两个例子class Trie {public:原创 2021-12-30 21:22:32 · 526 阅读 · 0 评论 -
拉宾-卡普算法详解以及示例[rabin-karp]
0 拉宾-卡普算法来自wiki在计算机科学中,拉宾-卡普算法(英語:Rabin–Karp algorithm)或卡普-拉宾算法(Karp–Rabin algorithm),是一种由理查德·卡普与迈克尔·拉宾于1987年提出的、使用散列函数以在文本中搜寻单个模式串的字符串搜索算法单次匹配。该算法先使用旋转哈希以快速筛出无法与给定串匹配的文本位置,此后对剩余位置能否成功匹配进行检验。此算法可推广到用于在文本搜寻单个模式串的所有匹配或在文本中搜寻多个模式串的匹配。1 算法本身主要思想1 朴素匹配: te原创 2021-12-28 22:04:29 · 1841 阅读 · 0 评论 -
递归和二叉搜索树 1 (binary search tree & recursive way)
0 递归和bst的基础1 构建bst 0108. 将有序数组转换为二叉搜索树1 题目https://leetcode-cn.com/problems/convert-sorted-array-to-binary-search-tree/2 解题思路1 AVL tree最主要的特性在于,任何子树的左子树和右子树的高度差不超过1,所以方法为:1.1 每次找到数组中间的值作为root,然后两边分别作为左右子树,左边都比root小,右边都大,刚好满足AVL要求/** * Definitio原创 2021-12-14 20:39:07 · 854 阅读 · 0 评论 -
并查集题集2
1 并查集关键理解: 并:是通过一条边将两个没有公共子集的集合合并,查:每个子集的所有子项对应的root是相同的class DSU{ public: vector<int> parent; vector<int> subTreeSize; DSU(int n) { parent.resize(n); subTreeSize.resize(n);原创 2021-12-06 10:00:20 · 224 阅读 · 0 评论 -
stronglyConnectedComponents 强联通分量求法 - kosaraju & tarjan & gabow & 并查集
1 强联通分量解释SCC(stronglyConnectedComponents) 对于G(v, e)的一个子图中,其任何两个顶点都存在一个path相互到达;2 图的拓扑排序拓扑排序的核心思路还是利用深度优先搜索,排序的基本思想为深度优先搜索正好只会访问每个顶点一次,如果将dfs的参数顶点保存在一个数据结构中,遍历这个数据结构就能访问图中的所有顶点,而遍历的顺序取决于这个数据结构的性质以及是在递归调用之前还是递归调用之后保存。1 前序: 在递归调用之前将顶点加入队列 —- pre()方法2 后序原创 2021-11-15 13:46:05 · 618 阅读 · 0 评论 -
滑动窗口题集1
1 滑动窗口priority_queue经常用0480 滑动窗口中位数1 题目https://leetcode-cn.com/problems/sliding-window-median/2 解题思路1 使用一个multiset维护当前窗口,1.1 不使用priority_queue的原因,无法删除元素1.2 不使用map/set的原因,不能含有重复元素2 对于窗口,维护一个中位数指针,注意到中位数指针在每一次窗口移动只会发生几种情况2.1 向左,向右,不动2.2 分类讨论清原创 2021-11-18 15:25:15 · 133 阅读 · 0 评论 -
前缀和题集1
1 前缀和 vector<int> prefSum {nums[0]}; for(int i = 1; i < nums.size(); ++i) { prefSum[i] += (nums[i] + prefSum.back()); }1546最大非重叠数组1 题目https://leetcode-cn.com/problems/maximum-number-of-non-overlapping-subar原创 2021-11-18 15:28:06 · 597 阅读 · 0 评论 -
全排列&字典序生成算法
0 全排列算法0.1 全排列实现1 一个排列,其优先交换靠右的位置的数字来获得下一个排列,比如1 2 3,他下一个必定是交换2 3,1不会参与其中,2 意识到一个排列,左侧属于高位,打个比方,若全排列对应的都有一个数字表示该排列的大小,那么左侧值越大,那么排列越大全排列(非递归求顺序)算法 1、建立位置数组,即对位置进行排列,排列成功后转换为元素的排列; 2、按如下算法求全排列: 设P是1~n(位置编号)的一个全排列:p =原创 2021-11-26 13:13:19 · 431 阅读 · 0 评论 -
并查集题集1 & dfs & bfs & unionMerge & 二分图
0 一些基础判断整个图是否连通使用dfs判断整个图是否连通: // if not connected, return false vecctor<int> stack = {0}; vector<bool> vis(graph.size(), false); vis[0] = true; int visCnt = 1; // dfs to check if connected原创 2021-11-29 21:17:39 · 207 阅读 · 0 评论