Processing math: 100%

随笔分类 -  数据结构&算法

摘要:```C++ // 查询异或最大值,每次插入和查询时间都是log(C) template class trie01 { vector> tree; public: trie01() : tree(1, vector(2, 0)) {} // 插入待检查的数字 void insert (T x) { 阅读全文
posted @ 2023-07-08 16:14 hellozhangjz 阅读(35) 评论(0) 推荐(0) 编辑
摘要:```cpp map indx; for(auto &a : arr) indx[a] = 1; int n = arr.size(); for(auto &p : indx) p.second = n--; for(auto &a : arr) a = indx[a]; ``` 阅读全文
posted @ 2023-06-12 16:36 hellozhangjz 阅读(9) 评论(0) 推荐(0) 编辑
摘要:https://www.luogu.com.cn/problem/P2602 // #include <iostream> // #include <iomanip> // #include <unistd.h> // #include <climits> // #include <string> 阅读全文
posted @ 2023-02-21 12:49 hellozhangjz 阅读(9) 评论(0) 推荐(0) 编辑
摘要:作用是查找符合条件的子串 1. 初始化左右指针 2. 不断增加right,直到窗口内子串符合要求 3. 减小left使窗口最小 4. 知道right到达尽头 阅读全文
posted @ 2023-02-13 11:12 hellozhangjz 阅读(13) 评论(0) 推荐(0) 编辑
摘要:若一个窗口达标,缩小窗口后必达标。若一个窗口不达标,扩大窗口必不达标。这就是窗口的单调性。 如果有窗口单调性这个性质,可能用窗口或者首尾指针的方法。 蓄水池算法 假设有一个流依次输出1,2,3...,还有一个容量为10的容器。每个数字k有10/k的概率进容器,如果容器满了,容器内的数字等概率被挤出去 阅读全文
posted @ 2022-05-11 20:46 hellozhangjz 编辑
摘要:Morris遍历 cur有左树且第一次遍历到,去左孩子 没左树或者第二次遍历到,去右孩子 没右树,去后继节点 得到Morris序。对于该序列中出现两次的节点,只保留第一次遍历,结果就是先序遍历。只保留第二次遍历,结果就是中序。 对于后序遍历:第二次遍历到某个节点,则逆序打印这个节点的左子树的右边界, 阅读全文
posted @ 2022-04-24 10:20 hellozhangjz 阅读(54) 评论(0) 推荐(0) 编辑
摘要:斐波那契数学方法 斐波那契的递推式有Fn=Fn1+Fn2\(\)(FnFn1)=(Fn1Fn2)AA是常 阅读全文
posted @ 2022-04-10 10:48 hellozhangjz 阅读(48) 评论(0) 推荐(0) 编辑
摘要:链表反转 准备三个指针,pre, head, next 循环队列 设置size和limit将putindex和pullindex的关系解耦掉. Min栈 设置两个栈,Min栈保存当前栈的最小值 递归复杂度 若递归满足:T(N)=aT(Nb)+O(Nd), 记$k = 阅读全文
posted @ 2022-02-18 14:46 hellozhangjz 编辑
摘要:推排序 优化(当数组初始有很多值):从后往前,每个元素下沉,时间复杂度为O(N) 优点:在空间复杂度为O(1)的情况下保证时间复杂度为O(nlogn) 前缀树 有点像哈夫曼编码,每个树节点有一个pass值和end值,pass记录经过这个节点的字符串的数量(包括以这个节点结尾),end记录以这个节点结 阅读全文
posted @ 2022-02-18 14:46 hellozhangjz 编辑
摘要:二分查找 什么情况用二分算法 对于数组f[x]或者函数f(x) 给出x,容易求Y 给出Y,不容易求x 函数单调 泛型情况下可以把小于目标值看成0,大于等于目标值看成1,问题就转化成查找第一个1的情况。 int binary_search_find_first_one(vector<int> nums 阅读全文
posted @ 2022-01-18 13:41 hellozhangjz 编辑
摘要:# 树状数组 为了描述方便,以下数组下标都从`1`开始。 ## 功能 给定一个数组`a[n]`,要求单点修改和区间查询 - 普通数组 - 单点修改:时间复杂度:`O(1)` - 区间查询:时间复杂度:`O(n)` - 前缀和数组 - 单点修改:`O(n)` - 区间查询:`O(1)` 我们发现这两种 阅读全文
posted @ 2020-07-12 19:23 hellozhangjz 编辑
摘要:# Sparse Table > ST表是一个静态二维数组`st[i][j]`,作用是快速查询(`O(1)`)区间最值(不只是最值,[可重复贡献问题](https://oi-wiki.org/ds/sparse-table/)都可以用),`st[i][j]`代表的是在以引索`i`为起点,长度为$2^ 阅读全文
posted @ 2020-04-25 10:47 hellozhangjz 阅读(136) 评论(0) 推荐(0) 编辑
摘要:什么是单调栈 一个从栈顶到栈底元素大小有序的栈 单调栈的优势 效率高:每个元素只进栈一次,出栈一次,所以时间复杂度是O(N). 什么时候用单调栈(单调栈的特点) 那单调递增(减)栈举例,对于数组中的某个元素,单调栈能在平均O(1)的时间找到离自己最近的比自己小(大)的两个元素(左边一 阅读全文
posted @ 2020-04-19 16:23 hellozhangjz 阅读(174) 评论(0) 推荐(0) 编辑

点击右上角即可分享
微信分享提示