![](https://img-blog.csdnimg.cn/20201014180756738.png?x-oss-process=image/resize,m_fixed,h_64,w_64)
算法与数据结构
文章平均质量分 52
DS
chen_ :)
Hello World
展开
-
基础ds算法模板
from AcWing基础算法原创 2021-12-23 22:29:19 · 1084 阅读 · 0 评论 -
根据后序和中序遍历输出先序遍历 (二叉树遍历)
分析二叉树遍历的性质有上述性质,可以分享原创 2021-10-18 21:32:37 · 528 阅读 · 0 评论 -
尺取法 & 反转 (开关问题)
Common skills尺取法Subsequence (POJ No.3061)题意:给定长度为n的数列整数a0,a1,a2,…,an-1 以及整数S,求出总和不小于S的连续子序列的长度的最小值,如果解 不存在,输出0.核心:连续子序列法一:构造前缀和数组sum先求出sum[i],从第1个数到第i个数的区间和每次固定一个开始查找的起点sum[i], 采用二分查找找到 sum[i] + S 的位置,区间长度即为(末位置-(起始位置-1)),用ans保存过程中区间的最小值时间复杂度 0原创 2021-11-26 22:38:31 · 273 阅读 · 0 评论 -
三角形problem
三角形性质三条边中的任何两边之和都大于第三条边栗子输入n,p (个数,其中一条边长)a[ i ] (n条边长,用于构成另外俩边)样例分析:共有9中可能{16, 27}, {16, 35}, {16, 42}, {27, 35}, {27, 42}, {27, 51}, {35, 42}, {35, 51}, {42, 51}。分析主要分析极限条件,即两边之和等于第三边的情况如果p不是最大,则满足条件的是小于a[i]+p的数如果p是最大 , 则满足条件的是大于p-a[i]的数原创 2021-09-27 10:14:37 · 72 阅读 · 0 评论 -
RMQ算法
实现:click转载 2021-10-24 20:12:18 · 63 阅读 · 0 评论 -
0x41 并查集
并查集 -> 是一个可以动态维护若干个不重叠的集合,并支持合并与查询的数据结构。核心:const int N = 1000010;int p[N];void init(){ p[i] = i;}int find(int x){ if(p[x] != x) p[x] = find(p[x]); return p[x];}void merge(int a,int b){ int pa=find(a),pb=find(b); if(pa!=pb){ p[pa] = pb原创 2021-11-22 12:42:48 · 3124 阅读 · 0 评论 -
DS homework-队列
优质的随从慕名而来题目DescriptionYH 学长想在酒馆战旗中赢得第一名,因此他要找 Bob 用漏斗蛋糕招揽一些优质的随从!有 n 个随从慕名而来,第 i 个随从的种类是 a_i。YH 学长十分贪心,他每个随从都想要,因此他准备了充足的黄金铸币并依次买下每一个随从。但即使如此,他也只能携带 m 个随从,当新买的随从无法加入队伍时,YH 学长只好卖掉队伍里之前最早买下的随从。“啊哈,三连!”,机智的 YH 学长发现利用酒馆中的三连机制能够让随从们变得更加强大。当 YH 学长买下一个种类为 x原创 2021-10-01 12:23:29 · 515 阅读 · 1 评论 -
二叉树的遍历(先序、中序、后序的转化)
二叉树的遍历性质:已知先序序列和中序序列可确定一棵唯一的二叉树;已知后序序列和中序序列可确定一棵唯一的二叉树;已知先序序列和后序序列不能确定一棵唯一的二叉树。前序遍历:根左右中序遍历:左根右后序遍历:左右根根据前序和中序遍历输出先序遍历思路:前序遍历第一个字母A,必定是这树的根节点。在中序遍历中找到A的位置,把中序遍历分成两个子树。取前序遍历中的第二个点B,在分成的两个子树中找到B的位置,再次分成两个子树。直到分出子树为止。( l == r )回溯到A点,对右子树进行同样的操作。原创 2021-11-28 22:24:17 · 1191 阅读 · 0 评论 -
线段树(1)
copy the videocode#include<iostream>using namespace std;#define MAX_LEN 1000void build_tree(int arr[],int tree[],int node, int start,int end){ if(start == end){ tree[node] = arr[start]; } else{ int mid = (start + end)/2; int left_node转载 2021-10-14 00:55:57 · 49 阅读 · 0 评论 -
线段树(2)
lazy(记录下对懒标记的认识)lazytage主要用于“区间修改”的优化中,可使算法的时间复杂度到O(logn)lazytage目的在于在修改区间的过程中不是每次都直接修改到叶子结点,而是在 l <= pl <= pr <= r 的情况下直接返回,在回溯之前向节点p增加一个标记(表明当前结点已经修改,但子结点未被更新“。懒标记要满足一个性质叫可叠加性,就是说你可以通过上面的来算出下面两个儿子的值,也可以反推回去。ps. 凡是要分裂的,就需要往下传(pushdown)examp原创 2021-11-06 22:21:22 · 157 阅读 · 0 评论 -
DS.作业
这里写自定义目录标题欢迎使用Markdown编辑器新的改变功能快捷键合理的创建标题,有助于目录的生成如何改变文本的样式插入链接与图片如何插入一段漂亮的代码片生成一个适合你的列表创建一个表格设定内容居中、居左、居右SmartyPants创建一个自定义列表如何创建一个注脚注释也是必不可少的KaTeX数学公式新的甘特图功能,丰富你的文章UML 图表FLowchart流程图导出与导入导出导入欢迎使用Markdown编辑器你好! 这是你第一次使用 Markdown编辑器 所展示的欢迎页。如果你想学习如何使用Mar原创 2021-10-10 11:21:22 · 140 阅读 · 0 评论 -
LIS and DILWORTH
lis & dilworth首先,先明白子串和子序列之间的差别:以字符串 abcdefgh 为例:字符子串指的是字符串中连续的字符eg. abc, efg····字符子序列指的是字符串中先后顺序一致但不一定连续的字符eg. adg, cdgh····可以去掉字符串中的部分字符,但不可改变其前后顺序。最长上升子序列(LIS)序列(1, 7, 3, 5, 9, 4, 8) ,其最长上升子序列长度为4,其中一条LIS(1,3,5,8)ps.与最长非降序子序列(二者区别就是序原创 2021-11-28 22:37:13 · 302 阅读 · 0 评论 -
小球下落(紫书)
小球下落有一棵二叉树,最大的深度为D,所有叶子的深度都相同,所有节点从上到下从左到右的编号为 1,2,3,4…2D-1在节点1处放一个小球,它会往下落,每个内节点上都有一个开关,初始化的时候都是关着的,当每次有小球落到一个开关的时候,它的状态就会变化当小球到达一个内节点的时候,如果开关是关闭的,就往左走,否则就往右走,直到走到叶子节点。输入 D ID表示二叉树的深度, 在输入I表示第几个小球(D <= 20 输入最多包含1000组数据);输出第I个小球最后落入的叶子节点数目。分析原创 2021-11-28 22:31:38 · 267 阅读 · 0 评论 -
cmb 实现输出程序运行时间
cmb 实现程序运行时间cppc++代码添加.......#include<time.h>..............printf("Time used = %.2f\n", (double) clock( )/ CLOCKS_PER_SEC);除以常数 CLOCKS_PER_SEC 以后得到的值以 “秒” 为单位cmb打开cmb窗口Windows命令echo ————————————— 回显exit ——————————————关闭命令行dir ————原创 2021-09-08 11:19:16 · 204 阅读 · 0 评论 -
数论 MATH
数学知识总结包括质数的筛法,约数,欧拉函数,快速幂,扩展欧几里得算法,高斯消元,求组合数,容斥原理,博弈论。THANKS原创 2021-08-10 12:03:30 · 65 阅读 · 0 评论 -
图论——笔记
图论笔记include 最短路、最小生成树、二分图原创 2021-07-29 11:14:23 · 82 阅读 · 0 评论 -
约瑟夫环问题推导
约瑟夫环问题:n个人成环从 1 开始报数报到M的人杀掉求剩下最后一个人的编号解决:若采用链表或者数组模拟,基础解法的时间复杂度为O(mn)采用公式解法时间复杂度可以降到O(n)code:int circle(int n, int m){ int ans; for(int i=2; i <= n; i++){ ans = (ans + m)%i; } return ans+1;} 分析:f(N,M) = N个·报数,每报到M时杀掉此人·,最终胜利者的编号递推式:原创 2021-09-12 21:21:07 · 88 阅读 · 0 评论