自定义博客皮肤VIP专享

*博客头图:

格式为PNG、JPG,宽度*高度大于1920*100像素,不超过2MB,主视觉建议放在右侧,请参照线上博客头图

请上传大于1920*100像素的图片!

博客底图:

图片格式为PNG、JPG,不超过1MB,可上下左右平铺至整个背景

栏目图:

图片格式为PNG、JPG,图片宽度*高度为300*38像素,不超过0.5MB

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+

一只老风铃

今已亭亭如盖矣

  • 博客(540)
  • 资源 (2)
  • 收藏
  • 关注

原创 正则表达式匹配:进阶版

匹配问题

2022-07-30 13:14:03 317 2

原创 和为K的子数组数量:前缀和+Hash

前缀和+hash优化

2022-07-25 18:49:45 264 1

原创 任务调度器

最大相同任务数思想

2022-07-25 16:27:09 918

原创 布隆过滤器

数据结构

2022-07-24 15:16:48 384

原创 状态DP:二进制状态与图的搜索

问题引入描述城市里有n个郊区和m条无向道路,第i条道路连接郊区Ai和Bi,路费是Ci。决定去其中的R个郊区,需要找到一条路线使得他们的花费最少,假设他们制定的旅游路线为V1, V2 ,V3 … VR,那么他们的总花费为从V1到V2的花费加上V2到V3的花费依次类推输入描述:第一行三个整数n, m, R(2 ≤ n ≤ 200, 1 ≤ m ≤ 5000, 2 ≤ R ≤ min(n, 15))。第二行R个整数表示需要去玩耍的郊区编号。以下m行每行Ai, Bi, Ci(1 ≤ Ai, Bi

2021-12-11 15:54:39 394

原创 树形DP:配对染色

问题引入描述给定一棵树,为每个顶点染成红色或蓝色。要求:每个红点周围有且仅有一个红点,每个蓝点周围有且仅有一个蓝点。“周围”的定义:某点周围的点指通过邻边直接连接的点。所谓树,即没有自环、重边和回路的无向连通图。输入描述:第一行一个正整数 n,代表树的顶点个数.。接下来的 n-1 行,每行两个正整数 u 和 v,代表点 u 和点 v 有一条边连接。保证输入的一定是一棵合法的树。输出描述:如果可以达成染色的要求,请输出一个长度为 n 的字符串,第 i个字符代表第 i个顶

2021-12-09 22:25:17 1578

原创 树形DP:树的最大独立集

最大独立集树的最大独立集,即树中最多的不相邻的点的集合问题引入描述Cwbc和XHRlyb生活在 s 市,这天他们打算一起出去旅游。旅行地图上有 n 个城市,它们之间通过 n-1 条道路联通。Cwbc和XHRlyb第一天会在 s 市住宿,并游览与它距离不超过 1 的所有城市,之后的每天会选择一个城市住宿,然后游览与它距离不超过 1 的所有城市。他们不想住在一个已经浏览过的城市,又想尽可能多的延长旅行时间。XHRlyb想知道她与Cwbc最多能度过多少天的时光?输入描述:第一行,两

2021-12-09 00:14:28 547

原创 取余dp:配整

描述一个数组,取一些数使得取的数之和尽可能大,但要求这个和必须是 的倍数。输入描述:第一行输入两个正整数 n 和 k第二行输入 n 个正整数输出描述:如果没有合法方案,输出 -1。否则输出最大的和。示例1输入:5 54 8 2 9 1输出:20说明:取后四个数即可思路问题要求在一个数组中,选取一定数字组配成能够被k整除最大的和,若采取基本做法,那么需要计算每个数字是否加入到Sum中,并求和,复杂度为指数级别采取动态规划dp[n][i]=k 表示前

2021-12-07 22:29:54 1089

原创 二维差分-记录边缘变化

描述给你一个n行m列的矩阵,下标从1开始。接下来有q次操作,每次操作输入5个参数x1, y1, x2, y2, k表示把以(x1, y1)为左上角,(x2,y2)为右下角的子矩阵的每个元素都加上k,请输出操作后的矩阵。输入描述:第一行包含三个整数n,m,q$.接下来n行,每行m个整数,代表矩阵的元素接下来q行,每行5个整数x1, y1, x2, y2, k,分别代表这次操作的参数1≤n,m≤10001≤q≤10n1≤x1≤x2≤nm1≤y1≤y2≤m输出描述:输出n行,

2021-12-07 20:13:04 598

原创 高维dp-合并回文串

合并回文串问题描述输入两个字符串A和B,合并成一个串C,属于A和B的字符在C中顺序保持不变。如"abc"和"xyz"可以被组合成"axbycz"或"abxcyz"等。我定义字符串的价值为其最长回文子串的长度(回文串表示从正反两边看完全一致的字符串,如"aba"和"xyyx")。需要求出所有可能的C中价值最大的字符串,输出这个最大价值即可输入描述:第一行一个整数T(T ≤ 50)。 接下来2T行,每两行两个字符串分别代表A,B(|A|,|B| ≤ 50),A,B的字符集为全体小写字母。

2021-12-05 22:23:55 772

原创 《论文解读-卫星对地观测任务启发式自主规划算法研究》

论文[1]张秀秀,王俊峰,杨春.卫星对地观测任务启发式自主规划算法研究[J].四川大学学报(自然科学版),2020,57(04):663-672.知网链接启发式算法在任务规划领域,启发式算法多用于实际的工程实践,其主要优势在于算法的实现思路简单、易于理解。同时算法能在较短时间内收敛,给出相应的规划结果。目前,卫星任务规划领域主要使用以下三大类规划求解算法算法适用特点最优化算法即在原始问题的搜索范围内寻找最优解,适用于问题规模较小,约束简单的情况智能优化算

2021-11-03 17:13:56 433

原创 《论文解读-基于遗传禁忌混合算法的敏捷卫星任务规划》

论文[1]丁祎男,田科丰,王淑一.基于遗传禁忌混合算法的敏捷卫星任务规划[J].空间控制技术与应用,2019,45(06):27-32.知网链接https://kns.cnki.net/kcms/detail/detail.aspx?dbcode=CJFD&dbname=CJFDLAST2020&filename=KJKZ201906004&uniplatform=NZKPT&v=UHeamCIwbbHV5fnAaFjVZRnGPZhbuZIYNqMRgl0ec

2021-11-01 19:15:38 359

原创 《论文解读-基于有向图模型的多星星上处理下传数据冲突优化决策方法》

论文[1]毕晓伟,李斌,王育强,陈实华,彭平,雷涛.基于有向图模型的多星星上处理下传数据冲突优化决策方法[J].电子信息对抗技术,2020,35(06):46-49+77.知网连接https://kns.cnki.net/kcms/detail/detail.aspx?dbcode=CJFD&dbname=CJFDLAST2020&filename=DZDK202006010&uniplatform=NZKPT&v=WUV2Ik7FqzXaHjBD%25mmd2F

2021-10-31 22:41:56 245

原创 秋天不回来

如何使用markdown欢迎使用Markdown编辑器新的改变功能快捷键合理的创建标题,有助于目录的生成如何改变文本的样式插入链接与图片如何插入一段漂亮的代码片生成一个适合你的列表创建一个表格设定内容居中、居左、居右SmartyPants创建一个自定义列表如何创建一个注脚注释也是必不可少的KaTeX数学公式新的甘特图功能,丰富你的文章UML 图表FLowchart流程图导出与导入导出导入欢迎使用Markdown编辑器你好! 这是你第一次使用 Markdown编辑器 所展示的欢迎页。如果你想学习如何使用M

2021-10-31 16:50:52 164

原创 字符串对象的简易实现

字符串对象String类型是字符串对象类型,其内部的实现方式主要有三种:vector方式的动态内存法指针法(即通过char*指向对应字符串区域)短字符串优化法(当字符串较短时,存在自身的char[]数组中,超过一定长度采取指针来指向)三种方法的不同,主要是存放方式,以及拷贝复制时不同,指针法可能采取浅拷贝(指向同一片区域),vector法采取深拷贝(指向不同副本),短字符串优化(更为复杂)指针法实现class m_string{private: char* ptr;

2021-09-02 14:39:24 160

原创 智能指针的简易实现

实现智能指针智能指针为了解决C/C++中动态内存的泄漏问题,这通常是由于程序忘记释放动态内存或者程序提前结束导致动态内存无法释放。RAIIRAII (Resource Acquire Is Initlaziation) 资源获取即初始化:其利用C++中对象的特性,即当一个对象脱离其作用域后,对象将自动调用析构函数完成释放。那么将资源的申请和释放对应于对象的构造和析构函数中,即可完成对资源的智能化管理。引用计数对于动态内存的管理,若该内存为多个对象所使用的动态内存,那么通常采取引用计数

2021-09-02 14:29:31 664

原创 ARP攻击与SYN攻击

SYN攻击拒绝服务攻击DOS以及分布式拒绝服务攻击DDOS是利用短时间内占用服务器大量得内存、网络、存储等资源,使得正常访问者无法访问。而SYN攻击是利用TCP三次握手的漏洞,攻击者发起大量的SYN握手包然后不再回应,使得服务器存在大量处于SYN_Recv状态的半连接,消耗服务器资源。SYN泛滥的实现细节攻击者伪造建立链接的TCP握手报文,需要在外层填充自己的IP地址:需要随机填充那些无法访问的IP源地址如果采取自身的IP地址进行填充,那么会暴露,另外,填充的IP地址如果是其它真

2021-08-22 11:46:04 382

原创 redis如何实现高性能

redisRedis:remote dictorytion server 远程字典服务 是一种基于内存,亦可持久化的key-value数据库。实现高性能的3大原因基于单线程实现,避免多线程带来的线程切换开销,单线程中使用IO多路复用处理并发大部分操作基于内存,读写操作不需要磁盘IO采取简单的数据结构,例如跳表、哈希表redis数据结构字符串redis中字符串的实现为 :SDS 简单动态字符串其实现特点是:空间预分配和惰性删除(与STL中Vector的空间分配机制类似)

2021-08-14 12:26:45 382

原创 LCA:路径积

LCA算法LCA即最近公共祖先,其通常的解决方法可以采取递归实现递归:采取后序遍历的方式,当第一个这样的父节点出现:即访问了那两个节点,那么该父节点即为所求具体可以采取count记录访问过的目标节点数目另外如果有多组这样的查询,可以从根节点开始,遍历一次构建Depth深度数组以及Parent回溯映射那么对于任意两个节点,先将深度Depth较大的那个向上回溯m=parent[m] =>直到同一高度,然后两个点一起回溯=》直到重合即为最近父节点路径积问题描述给定一棵

2021-07-21 11:24:08 199

原创 DP:最小调整次数

描述给出两个数列,求使第一个数列严格降序,第二个数列严格升序的最少交换次数若无法交换成严格有序,返回“-1”示例1输入:[5,4,3,2,1],[1,2,3,4,5]返回值:0说明:排列已经满足要求,不需要交换。示例2输入:[1,2,3,4,5],[5,4,3,2,1]返回值:4示例3输入:[3,2,1],[1,3,3]返回值:-1说明:不能满足要求,返回 -1。求解思路问题求解上下两个数组最少交换次数,采取动态规划的思路,即:dp1[i]=

2021-07-20 19:03:25 1384

原创 n皇后简洁做法

递归解决搜索问题描述已知正整数n,即在一个nxn的棋盘上放置n个棋子,使每行每列和每条对角线上都只有一个棋子,返回有多少种摆法方法。保证n小于等于15。测试样例:1返回:1求解思路n皇后问题是典型的搜索问题,但朴素的遍历方式复杂度过大:具体的优化思路:每行填充一个元素从第一行开始,每次新的第Index行,有N个可选填充位置分别研究每个填充位置(index,i),符合同一列不重复:(即第i列之前所有行不存在元素,每一行只填充一个,因此不需要考虑行重复)针对对角线重复判断

2021-07-09 16:19:04 164

原创 多维最长递增子序列

最长递增子序列一般采取动态规划的思路求解,常见的有两种:①:dp[i]表示以vec[i]结尾的最长递增子序列长度②:dp[len]=k表示长度为len的最长递增子序列末尾最小为k多维最长递增子序列描述已知三个int数组w,l,h,分别表示每个箱子宽、长和高,同时给定箱子的数目n。请设计算法,将箱子都堆起来(箱子不能反转),且上面箱子的宽度和长度必须小于下面的箱子。返回值为能够堆出的最高的高度。要求n小于等于500。测试样例:[1,1,1],[1,1,1],[1,1,1]返回:1

2021-07-07 13:53:01 146

原创 维护X的秩:二叉搜索树构建

描述已知一个数组A及它的大小n,在读入这串数的时候算出每个数的秩,即在当前数组中小于等于它的数的个数(不包括它自身)。从而返回一个int数组,元素为每次加入的数的秩。保证数组大小小于等于5000。测试样例:[1,2,3,4,5,6,7],7返回:[0,1,2,3,4,5,6]思路要求随着数字的到来统计之前所有比当前小的数字的数目通过维护一棵二叉搜索树来实现,树的节点增加一个域Count用于统计左孩子节点的总数即:比当前节点更小的节点的数目那么一个新的数字A[i],从根节

2021-06-24 13:56:24 189

原创 最小调整有序

问题描述描述给定一个int整数数组A及其大小n,请编写一个函数,找出索引m和n,只要将m和n之间的元素排好序,整个数组就是有序的。注意:n-m应该越小越好,即找出符合条件的最短序列。请返回一个二元组,元组的两个元素分别代表所求序列的起点和终点。(原序列位置从0开始标号,若原序列有序,返回[0,0])。要求A中元素均为正整数。测试样例:[1,4,6,5,9,10],6返回:[2,3]O(Nlog(N))级别做法先将原数组排序得到排序数组,依次寻找两个端点,即原数组左边起第一个没有

2021-06-24 10:13:34 144

原创 单调栈+辅助栈:下一个较大元素的最小值

单调栈一个保持栈中元素有序的结构,可用于寻找元素下一个(最近)的较大值:若新来的元素比栈顶更小,那么不断弹出栈顶,以保持最终有序描述给定一个int数组A及其大小n,返回一个int数组,int数组中的元素是原数组中每个元素比他大的下一个元素,若不存在则为-1。保证数组中元素均为正整数。测试样例:[11,13,10,5,12,21,3],7返回:[13,21,12,12,21,-1,-1]struct num{ int val;//值 int index;//原先

2021-06-22 17:33:31 603 1

原创 二维最长递增子序列

最长递增子序列通常的基本思路是采取动态规划思路,即:dp[len]=k 表示当前长度为len的递增子序列末尾最小为k动态规划过程为,对于新来的元素m,找到dp数组中第一个大于m的元素dp[i]有: dp[i-1]<m<dp[i] 那么 m与之前的dp[i-1]对应元素可以构成末尾更小的长度为i的递增子序列,即更新 dp[i]=m》dp数组可能增长,对应于情形:m比之前dp[max]还大,max=max+1问题引入:二维最长递增子序列描述给定一个二维int

2021-06-22 11:19:45 598

原创 最长字符串:排序+递归判断

问题描述描述给定一个string数组str及其大小n。找出该数组中最长的那个字符串,且要求该字符串能由数组中其他的字符串组成(使用的字符串可重复)。请返回满足要求的最长字符串的长度,否则返回0。测试样例:[“a”,“b”,“c”,“ab”,“bc”,“abc”],6返回:3求解思路问题,一个字符串S能否由字典Dict中各单词拼接而成,可以采取递归的思路:即:判断若字符串S前面部分等于Dict中一个单词word 那么=》剪切掉S前面部分,剩余部分递归的进行判断本问题优化策略

2021-06-21 17:31:50 214

原创 双队列实现条件操作

双栈实现最值队列实现一个能随时返回最大值的栈,其核心操作是实现一个辅助单调栈:即若新入的元素,比单调栈(递增)栈顶还大(注意包含等于)则入到单调栈弹出元素时,若主栈栈顶元素与单调栈栈顶元素相等,则均弹出单调栈栈顶即主栈中最大的元素问题描述给定一个队列及一个操作序列ope,代表所进行的入队列出队列操作。第一个元素为1则入队列,第二个为对应的数;第一个元素为2则出队列,第二个若为0则出最先入队列的那个数,为1则出最先入队列的正数,为-1则出最先入队列的负数。请按顺序返回出队列的序列,并

2021-06-17 10:39:24 196

原创 同时推进-二叉树对称性判断

问题描述给定一棵二叉树,判断其是否是自身的镜像(即:是否对称)例如:下面这棵二叉树是对称的1/ 2 2/ \ / 3 4 4 3下面这棵二叉树不对称。1/ 2 2\ 3 3备注:用递归和迭代两种方法解决这个问题非递归思路对于前序遍历:根节点=》左子树=》右子树若需要判断对称性,那么可以修改前序遍历的方式,即:①根节点=》左子树=》右子树②根节点=》右子树=》左子树①和②采取非递归的方式同步推进,研究中间每个节点是否对称

2021-06-09 11:45:54 110

原创 五月在北京

看着日落一直到我们都睡着。好白,好想躺上去睡觉记忆中的那座铁架桥,模糊了也清晰了哪里都不缺仰望星空的人,你也是吗梦想不大,想永远停留在这一秒

2021-05-30 12:24:59 140 1

原创 队列模拟+归并求解

题目描述排队等号时,观察到以下场景。银行有m个服务窗口,假设当前有n个人等待办理业务,那么这n个人会被顺序分配一个从1到n的号码。等待办理业务的流程如下:从第1号到第n号顺序的进行排队。假设当前第1号到第i-1号都正在办理或已经办理完业务,且某个窗口A没有客人正在办理业务,那么第i号会马上到窗口A办理他的业务。如果有多个这样的窗口,第i号会随意选择一个窗口。0时刻,观察到m个窗口都没有客人正在办理业务,而n个人正在等待办理业务。为了简化问题,我们假设第i号不管在哪个窗口办理业务,办

2021-04-29 14:57:18 154

原创 树的分割:DFS后序遍历

题目描述有n个房间,房间之间有通道相连,一共有n-1个通道,每两个房间之间都可以通过通道互相到达。通过封闭一些通道来把n个房间划分成k个互相不连通的区域,他希望这k个区域内部的金币数目和都大于等于m,是否可行。示例1输入3,2,3,[1,2],[2,3],[3,1,2]返回值true说明切断1和2之间的通道,划分出了2个金币数为3的连通块第一个参数n代表房间数量第二个参数k代表要划分成k块区域。第三个参数m代表每块区域的金币数要大于等于m第四、五个参数vector

2021-03-28 13:01:10 360

原创 Leetcode通配符匹配②

题目描述请实现一个函数用来匹配包括’.‘和’‘的正则表达式。模式中的字符’.‘表示任意一个字符,而’'表示它前面的字符可以出现任意次(包含0次)。在本题中,匹配是指字符串的所有字符匹配整个模式。例如,字符串"aaa"与模式"a.a"和"abaca"匹配,但是与"aa.a"和"ab*a"均不匹配示例1输入“aaa”,“a*a”返回值true思路本题不同于以往的.代表一个字符 代表任意字符串(包含空)的问题。本题代表前面的字符可以统配0或者多次采取dp[i][j]表示串的前面i

2021-03-23 01:36:53 140

原创 STL:迭代器iterator

迭代器模式迭代器模式:提供一种方法,使得外部可以依次访问内部的元素,而不需要明确其结构的内部实现。STL的中心思想是:数据容器与算法分离,彼此独立设计,最后通过一定的融合技术将两者结合使用。STL三大基本组件:容器、算法、迭代器Iterator find(Iterator first,Iterator last,const T& val){ while(first!=last && *first!=val) { fir

2021-03-22 11:46:15 218

原创 再谈std:string

string的三种实现方式《Effctive STL》中提及std:string有三大类实现方式方法原理无特殊处理 eager copy采取类似于std:vector的数据结构,早期实现方式Copy On Wirte 写时复制即维护一个指向字符串存储空间的指针短字符串优化SSOstring对象本身空间可以存放16长度以内字符串,长字符串则由指针指向常见C++实现库采取的string实现方法:库实现方式g++ std:stringCO

2021-03-19 11:27:59 491

原创 linux虚拟内存④:段与缺页

Linux虚拟内存系统Linux将进程的地址空间,将虚拟内存区域组成一些区域(段)的集合。一个区域就是已分配的虚拟内存连续片(chunk),这些段通过某种方式相互链接。一个进程的地址空间由下而上由多个不同类型的连续区域(段)组合而成:代码段、初始化数据段、未初始化数据段、运行时堆区域、共享库的映射区域、运行时栈区域、内核代码和数据段(多个进程通过虚拟内存方式共享)、内核为每个进程维护的元数据(页表、task_struct、mm结构)它们在虚拟地址空间中内部连续,中间则存在空隙,内核通过链表(

2021-03-18 10:48:00 345

原创 区间+二分:求解最值

二分思想当可以确认所求的问题的解,一定位于一个有序区间内,并且满足区间前面部分满足要求,区间后面部分不满足要求,那么可以采取二分的思想进行对数级别复杂度的求解定位。题目描述一个长度为n的正整数序列,从里面取出一段连续的长度大于等于k的序列。定义一个序列的“中数”为最大的整数x,满足序列中至少一半的数字大于等于x从中任取序列的,若存在中数,最大中数可以是多少?示例1输入5,3,[30,1,2,31,9]返回值30说明选前四个数字组成[30,1,2,31],中数为30求

2021-03-16 12:07:17 298

原创 dp+滚动区间:字母交换

dp问题的核心思路是利用之前的计算结果来计算当前的问题,主要包含两大类型:①用序号之前的计算结果,即k=>k+1由k步结果计算k+1结果②用小规模问题的计算结果,例: [left+1,right-1]=>[left,right]即无关序号,关心问题规模题目描述字符串S由小写字母构成,长度为n。定义一种操作,每次都可以挑选字符串中任意的两个相邻字母进行交换。询问在至多交换m次之后,字符串中最多有多少个连续的位置上的字母相同?输入描述:第一行为一个字符串S与一个非负整数m。(1.

2021-03-15 14:15:20 178

原创 BFS+优先队列:BOX

题目描述有一个推箱子的游戏, 一开始的情况如下图:上图中, ‘.’ 表示可到达的位置, ‘#’ 表示不可到达的位置,其中 S 表示你起始的位置, 0表示初始箱子的位置, E表示预期箱子的位置,你可以走到箱子的上下左右任意一侧, 将箱子向另一侧推动。如下图将箱子向右推动一格;…S0… -> …S0.注意不能将箱子推动到’#'上, 也不能将箱子推出边界;现在, 给你游戏的初始样子, 你需要输出最少几步能够完成游戏, 如果不能完成, 则输出-1。输入描述:第一行为2个数字,n,

2021-03-14 12:51:57 162

原创 贪心算法:平均

题目描述有三只球队,每只球队编号分别为球队1,球队2,球队3,这三只球队一共需要进行 n 场比赛。现在已经踢完了k场比赛,每场比赛不能打平,踢赢一场比赛得一分,输了不得分不减分。已知球队1和球队2的比分相差d1分,球队2和球队3的比分相差d2分,每场比赛可以任意选择两只队伍进行。求如果打完最后的 (n-k) 场比赛,有没有可能三只球队的分数打平。输入描述:第一行包含一个数字 t (1 <= t <= 10)接下来的t行每行包括四个数字 n, k, d1, d2(1 <= n

2021-03-12 09:52:12 230

计算机图形学-Bezier与Bspline曲线,曲面

MIT计算机图形学作业 C++实现,Bezier曲线,Bspline曲线

2018-01-05

正则式到最小化DFA

实现了从正则式子到NFA,NFA到DFA,并最小化DFA的过程,

2018-01-05

空空如也

TA创建的收藏夹 TA关注的收藏夹

TA关注的人

提示
确定要删除当前文章?
取消 删除