- 博客(21)
- 收藏
- 关注
原创 区间合并算法
前言: 最近都在忙毕设和论文,已经好久没有写博客了。今天打周赛的时候遇到了区间合并的问题,前来记录一下。区间合并算法对于单次的区间合并,可以使用差分算法一次遍历即可,当区间范围在 [0,1018][0, 10^{18}][0,1018] 的时间复杂度为 nlognnlognnlogn但是对于多区间问题,使用上述算法肯定会超时,因此这里来介绍一个 nlognnlognnlogn 的区间合并与修改的算法模板。/*** * @author : Laugh * 适用范围 :
2022-05-15 16:20:51
378
原创 二叉树的三种遍历 (递归+迭代)
前言:真的好久没有写博客了。最近也到春招季了,想必很多小伙伴在准备面试了,因此想着来写一篇关于二叉树遍历的博客。同时也希望大家:山水万程,皆有好运!定义树结构:struct TreeNode { int val; TreeNode *left; TreeNode *right; TreeNode(int x) : val(x), left(NULL), right(NULL) {}};递归版本:普通写法void dfs(TreeNode *root){
2022-03-12 15:01:55
1866
1
原创 C++ 利用 istringstream 实现字符串分割
前言:今日遇到了需要对字符串进行分割的题目,由于 C++ 里没有内置的 split() 函数,所以前来贴出模板。代码模板:vector<string> split(string &s){ istringstream iss(s); vector<string> strs; string temp; while(getline(iss, temp, '/')){ strs.emplace_back(move(temp)); } return
2022-01-25 10:00:12
1028
原创 图的离散化 (LeetCode 1036)
前言:[ 最近遇到了很多新的知识点 所以写博客的频率也比较频繁 ] 今天遇到了图的离散化相关的题目,由于很早就听说过这个词,但是一直没有真正了解,因此前来记录一下离散化离散化的本质就是在 不改变数据间大小关系 的前提下,把较大范围的数据映射到较小的数据空间,从而保证了可以在有限的时间和空间复杂度内完成搜索那对于图的离散化也是相同的:对于一个大范围的图,在不破坏图的结点间联通性的情况下,将有有效节点变得 相对密集,从而缩小图的范围概念总是抽象的,我们来看一道题参悟参悟题目分
2022-01-11 11:45:55
937
原创 前缀和与差分数组 (一维和二维)
前言:今天写题目的时候遇到了一个二维差分的题目,由于之前没有接触过,因此前来记录一下前缀和差分通常需要和前缀和一起使用才能发挥奇效,所以我们先来介绍一下前缀和。一维前缀和:对于一个长度为 nnn 的数组 arrarrarr , 前缀和数组的定义为 sum[i+1]=sum[i]+arr[i]sum[i + 1] = sum[i] + arr[i]sum[i+1]=sum[i]+arr[i], 其中 i∈[0,n)i \in [0, n)i∈[0,n).二维前缀和:对于一个行数为 mmm 列
2022-01-10 21:35:18
618
原创 关于C++中对set和multiset进行二分查找 (LeetCode 220)
前言:今天碰到了一题关于滑动窗口+二分查找的题目,用C++做题时需要使用multiset,因此前来贴出模板,望能供大家参考。题目这里贴出原题:LC 220. 存在重复元素 III 供大家测试代码使用题目解析: 本道题如果使用其他方法可能会将题目复杂化,但是如果使用滑动窗口却会非常直观:由于题目需要找两个下标不同的元素,所以我们可以将 nums[0]nums[0]nums[0] 插入集合后,枚举窗口右边界的下标 i(i∈[1,n−1])i (i\in[1, n - 1])i(i∈[1,n−1]),同
2022-01-08 21:05:31
2471
原创 双向单调栈模板
前言:今日遇到了双向单调栈的题,这里放出模板和题目,以备之后使用简单介绍:单调栈的初始目的就是求在一个方向上小于 (或小于等于) 自身的第一个元素的值 (或下标),而双端单调栈便是分别求左右两边。双向单调栈在使用时需要注意一些边界条件,同时配合 前缀和 与 枚举 使用会有奇效。(不信你做题看看)题目:LeetCode 84,LeetCode 1576, LeetCode 907代码模板vector<int> L(n), R(n);// Calculate the array L
2022-01-01 18:05:26
3043
原创 针对多个子序列存在性的判断 (LeetCode 792)
前言:对于两个字符串 sss 和 ttt,若要判断 ttt 是否是 sss 的子序列,相信大家都不会陌生,一个 O(n)O(n)O(n) 的遍历或加上双指针的优化,都能很快地结果。但是,若要判断一系列字符串 wordswordswords 中有几个是 sss 的子序列呢?这时候就需要引入一个新的算法:滚动字典桶先来说一说 滚动字典桶 这个新名词:其实这个词是我自己发明的,主要有三个关键词:滚动 + 字典 + 桶。滚动是因为其不像字典树那样需要根据字符串的长度不断创建新节点,而是可以不断复用数组。字典
2021-12-11 15:37:57
241
原创 滑动窗口的最值处理以及延伸思考
前言:一直以来,对于一个给定长度为 nnn 的数组,都不知道应该如何求任意两个下标间的最小值,今天刚好碰到了这道题,也算是给我上了一课????我们简化问题:对于长度为 kkk 的窗口,求任意窗口间的最小值。之后只需要把窗口的范围变为 [2,n][2, n][2,n] 即可。方法一:基于最大堆class Solution {public:using PII = pair<int, int>; vector<int> minSlidingWindow(vecto
2021-12-10 10:34:09
122
空空如也
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人