avatar
文章
170
标签
111
分类
5

首页
分类
友链
说说
Doraemon's Blog
搜索
首页
分类
友链
说说

Doraemon's Blog

572. 另一棵树的子树
发表于2021-05-07|算法|01字典树
572. 另一棵树的子树 解法一、暴力遍历每一个子树,比较子树是否相同 时复:O(s * t) 1234567891011121314151617181920212223242526272829303132333435363738/** * Definition for a binary tree node. * struct TreeNode { * int val; * TreeNode *left; * TreeNode *right; * TreeNode() : val(0), left(nullptr), right(nullptr) {} * TreeNode(int x) : val(x), left(nullptr), right(nullptr) {} * TreeNode(int x, TreeNode *left, TreeNode *right) : val(x), left(left), right(right) {} * }; ...
117. 填充每个节点的下一个右侧节点指针 II
发表于2021-05-07|算法|01字典树
117. 填充每个节点的下一个右侧节点指针 II 题目有点类似于层序线索化,就是在层序遍历的基础上魔改一下,使得可以获得当前遍历到第几层的信息。 1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465/*// Definition for a Node.class Node {public: int val; Node* left; Node* right; Node* next; Node() : val(0), left(NULL), right(NULL), next(NULL) {} Node(int _val) : val(_val), left(NULL), right(NULL), next(NULL) {} Node(int _val, Node* _left, Node* _right, N ...
Typora使用配置
发表于2021-05-07|算法|01字典树
取消拼写检查默认会检查拼写错误,并在下方给予红线提示。 偏好设置->拼写检查->不使用拼写检查 取消自动保存偏好设置->自动保存 取消自动检查更新图像上传路径偏好设置->图像->插入图像时->复制到指定路径->设置图片保存路径 开启markdown扩展语法偏好设置->markdown->markdown扩展语法 代码块显示行号偏好设置->markdown->代码块
56. 合并区间
发表于2021-05-07|算法|01字典树
56. 合并区间双指针,先按照左端点升序排序,对于一个区间,如果可以和后面的合并,则其右端点一定大于后面区间的左端点,且合并后的区间右端点要取两个区间大的右端点,取max,注意边界即可 vector<vector<int>>默认按照第一列的元素从小到大排序,注意如果这里加cmp函数,必须是静态函数,因为sort是全局函数,全局函数不能调用类的成员函数 123456789101112131415161718192021222324252627282930class Solution { public: vector<vector<int>> merge(vector<vector<int>>& intervals) { int n = intervals.size(); sort(intervals.begin(), intervals.end()); vector<vector<int>> res; ...
15. 三数之和
发表于2021-05-07|算法|01字典树
先排序,两层for循环,二分寻找-(nums[i]+nums[j]),用map去重 时复:O(n2logn) 算上常数差不多9e8左右 刚好超时 寻找能优化的地方 因为排过序了,如果-(nums[i]+nums[j])<nums[j]就没必要找了,加上这句正好卡过去 123456789101112131415161718192021222324252627282930313233343536373839struct node { int a, b, c; bool operator<(const node &o) const { return a == o.a ? (b == o.b ? (c < o.c) : b < o.b) : a < o.a; } node(int ta, int tb, int tc):a(ta),b(tb),c(tc){ };};map<node, bool> vis;class Solution ...
小Q与异或
发表于2021-04-27|题目|异或题
题目 题意让你构造一个序列,满足m个位置的前缀异或等于m个值 题解先把p位置的值定成x,把每一个定好的位置标记一下,从前往后跑,没有标记过的点就给他定一个比1e9要大的数,之所以要比1e9要大,是因为要保证定好的位置和它的前一个位置异或不为0,而定好的位置的值x<=1e9,输出时,就输出每一个数和前一个数的异或结果 CODE123456789101112131415161718192021222324252627282930313233343536#include <stdio.h>#include <algorithm>using namespace std;int n , m;int ned[1200000] , is[1200000];void work () { int i , p , x , pre; scanf ( "%d%d" , &n , &m ); for ( i = 1 ; i <= m ; i++ ) { scanf ( "%d%d" , &p ...
字典树
发表于2021-04-27|算法|字典树
字典树 作用:快速实现查询某一个字符串是否出现过,类似字符串哈希 时复:O(L) [L:要查询的字符串长度] 空间复杂度:正比于需要插入的字符串总量,比普通数组存储要省空间 大致过程每一个节点代表一个字符,根节点为0,从根节点到叶子节点是一个完整的字符串,实际上就是一个前缀树,两个相同前缀的字符串在字典树上就有一个相同的前缀路径,给每一个节点编一个号,从1开始,用一个二维数组,第一维表示编号,第二维表示字符下标(s[i]-‘a’),来表示这个编号的节点下有没有这个字符,这样一来省去了相同前缀的空间,而且查询可以每次以O(1)时间查询当前编号下是否有查询字符,需要查询L次,所以是O(L) 例题洛谷模板P2580 题意给定n个字符串,m次询问,每次询问一个给定字符串是否出现过? 题解两种做法: map trie字典树 CODE12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061#include <bits/ ...
可持久化并查集
发表于2021-04-26|算法|可持续化并查集
可持久并查集 前置知识:主席树、可持久化数组 作用:保存历史的集合版本,查询过去版本 空间复杂度>=(klog(n)+2^log(n)^-1) [一般开40倍原空间] 详细讲解 大致过程将fa数组和dep数组可持久化,fa数组就有了各个版本不同的值,如果开结构体的话只需要将fa定义成结构体类型,因为两个数组可持久化后下标是相同的,需要注意的是不能路径压缩,一定要按秩合并! 题目洛谷模板 题意给定n个集合,每一个集合初始只有自己一个数,接下来m次操作,每次操作有三种选择,合并a和b,回到k版本,询问a和b是否属于一个集合 解法将fa数组和dep数组可持久化,需要注意的是一定不能路径压缩,因为每次要保存版本,只是拉出来一条链,压缩路径的话就会影响其他版本的fa数组值,例如现在高版本压缩了一次路径,低版本的fa数组值被改变了,之后查询低版本时就会出错!如果没有了路径压缩那么时间就会慢很多,所以一定要按秩合并来优化一下,为什么按秩合并会快一点呢? 看这个图,倘若询问2和4是否在一个集合,第一个畸形图就需要多往上走两步,而第二个图就可以省下些时间。 CODE1234567891011 ...
可持久化数组
发表于2021-04-25|算法|可持久化数组
可持久化数组(可持久化线段树) 前置知识:主席树 作用:记录下历史版本,可以进入历史版本进行修改或者查询 洛谷P3919 题意给定初始版本数组的n个数,之后m次操作,可以查询或者单点修改,每次查询或者修改都会产生一个新版本,查询产生一摸一样的版本,修改会产生一个只有一个位置不同的版本,版本数连续递增,输出每次查询某一个版本的某一个位置的数是几? 解法原本想用vector开n个表示数组的每一个位置的不同版本,想的是每次只把一个数塞进要修改的ve里,不过这样会有问题。正解是可持续化数组,本质上就是一个保存历史版本的线段树,利用主席树的思想单点修改时只拉出来一条链保存修改过的信息。 CODE123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869#include <bits/stdc++.h>//#pragma G++ optimize(2)//#pragma G++ optim ...
计算几何
发表于2021-04-20|算法|计算几何
计算几何皮克定理: 2S=2a+b-2 (S:三角形面积,a三角形内部点的个数,b三角形边上点的个数),求三角形内点的个数 求线段上整数点的个数:gcd(abs(x2-x1),abs(y2-y1))+1 判断一个点是否在多变形内部:以这个点向多边形顶点做向量,相邻两两做叉积(左乘右),若得出的所有结果符号都一样,则在内部 计算多边形面积:从原点向多边形顶点做向量,相邻向量做叉积(右乘左)累加求和除以2 判断一个点是否在两条直线中间:从两个直线上随便找两个点,从当前点向交点和直线上一点做向量,两向量做叉乘,另外一条直线也是如此,叉乘的两个结果如果符号不同就在中间,否则不在
1…8910…17
avatar
Doraemon
记录成长经历
文章
170
标签
111
分类
5
Follow Me
公告
纵岁月在笔尖洇开深浅,初心始终是砚台上那方不涸的墨。
最新文章
word 公式批量转换
word 公式批量转换2026-01-17
内网穿透到底是个什么东西?
内网穿透到底是个什么东西?2026-01-16
从“用户信息”到“向量表示”:一篇把用户特征转 成 Embedding 的完整实战指南
从“用户信息”到“向量表示”:一篇把用户特征转 成 Embedding 的完整实战指南2026-01-12
2025 年度总结
2025 年度总结2025-12-23
强化学习入门
强化学习入门2025-11-08
最新评论
正在加载中...
分类
  • 技术9
  • 生活5
  • 算法89
  • 记录24
  • 题目36
标签
中断处理程序 双端队列+BFS 树链剖分 BIO div3 数据结构 三分 树状数组 线段树+欧拉函数 DFS bitset优化 流控 动态代理 ACM冷知识 矩阵快速幂 python 01字典树 dfs 单调栈 背包 竞赛 Manacher 期望 全排列 离散化差分 动态规划 异或题 启发式算法 可持续化并查集 STL 文件读写 雪花算法 targan 类的加载过程 数学问题记录 操作系统 miniob hexo NIO 事务隔离
归档
  • 一月 20263
  • 十二月 20251
  • 十一月 20251
  • 十月 20252
  • 九月 20255
  • 三月 20252
  • 二月 20255
  • 一月 20251
网站资讯
文章数目 :
170
已运行时间 :
本站总字数 :
272.8k
本站访客数 :
本站总访问量 :
最后更新时间 :
©2020 - 2026 By Doraemon
框架 Hexo|主题 Butterfly
Hi, welcome to my blog!
搜索
数据库加载中