自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+

小胡同的诗

往事已矣,来日犹可追

  • 博客(498)
  • 资源 (1)
  • 收藏
  • 关注

转载 动态规划题集整理

转自http://blog.csdn.net/cc_again?viewmode=list动态规划一直是ACM竞赛中的重点,同时又是难点,因为该算法时间效率高,代码量少,多元性强,主要考察思维能力、建模抽象能力、灵活度。本人动态规划博客地址:http://blog.csdn.net/cc_again/article/category/1261899********************...

2019-04-26 18:38:45 444

转载 线段树题集整理

转自 https://blog.csdn.net/Soul_97/article/details/86928393 区间最值I Hate It                    &nbs...

2019-04-26 18:34:12 172

转载 数论题集整理

转自 https://blog.csdn.net/Soul_97/article/details/87904163  1、素数和因数分解     Largest prime factor   ★☆☆☆☆    ...

2019-04-26 18:32:20 277

原创 【Python】时间测试装饰器问题解决记录

昨天在对04年的一篇分割论文进行实现测试,封装测试时间装饰器的时候,发现主逻辑运行结束后,装饰器那边的时间 log 打印了居多遍。

2023-03-01 10:50:32 244 1

原创 【数学】手写开根号(牛顿迭代法 | 二分)

利用牛顿迭代法和二分法分别求某个有理数的开 n 次根号。

2022-09-19 23:13:28 1285

原创 【Linux】Ubuntu20.04 无法访问 http://cn.archive.ubuntu.com 问题记录解决

解决 Ubuntu 20.04 版本 apt 官方国内源访问失败的问题,最终将其换成阿里源得以解决

2022-09-03 11:56:41 15893 7

原创 HAUT1227 Flowers(贪心)

题目链接:haut1227题面解题思路贪心这个问题的第一个关键点在于要发现:组成混合颜色的方案一定要优先于组成纯色的方案。因为组成纯色方案更具鲁棒性。在相同资源下,组成三束分别不同颜色的花束一定也可以将其改成三束混合颜色的花束;而在小于三束混色花束的资源下却无法组成任何一束花。于是,我们大胆认为前者方案优于后者。第二个关键点在于要发现:构成最大方案数的核心部分就是混合颜色的花束数量,因为当无法构成混合颜色花束时,问题就相当简单了,直接计算各自的纯色花束即可。而构成混合颜色花束数量取决于三种颜色中

2022-02-05 19:17:05 688 2

原创 关于 Github.io 域名访问遭拒解决记录

问题之前部署在 github 上的项目访问它的主页莫名其妙地遭拒,尝试了IE、Edge、Chrome 等浏览器均无效果。原因DNS 域名解析的问题,考虑自动获取的 DNS 域名解析服务器可能把这类屏蔽。解决办法就是更换域名服务器解决进入网络配置,手动配置域名服务器『208.67.222.222』,solve!...

2021-01-19 20:24:03 715

原创 LeetCode287 寻找重复数(双指针 | 弗洛伊德判圈)

题目链接:leetcode287题面解题思路二分二分重复的数的答案,根据抽屉原理,数据中必有重复的数时间复杂度:O(nlogn)O(nlogn)O(nlogn) ,空间复杂度:O(1)O(1)O(1)双指针构造一个快慢指针,第一次相遇后,继续走c步到达环的起点也就是入度大于2的点,即重复的数。证明:设环之前的长度为a,环起点到相遇点长度为b,相遇点到环起点为c由于起初步长相差1,所以直到相遇时,快指针路程一定只比慢指针多k(b+c),也就是环的长度的整数倍并且两者的路程是两倍的关系

2020-12-07 09:00:59 218

原创 【线性代数】思维脑图

章节目录行列式矩阵向量与向量空间线性方程组特征值特征向量二次型高等代数补充部分总体框架行列式矩阵向量与向量空间线性方程组特征值特征向量二次型高等代数补充Jordan标准型步骤构造特征方程初等行+列变换进行消元化为对角(不能做 Ei(k)E_i(k)Ei​(k) 变换!)因式分解得初等因子(某个项得幂不能拆)根据初等因子的幂构造 Jordan 标准型应用判定矩阵相似性原理在复数域中,任何一个矩阵都相似于一个 Jordan 标准型合同变换

2020-12-05 10:11:14 537

原创 【Netty】学习笔记(中)

概念Netty是一个异步的、事件驱动的网络应用框架,用于快速的开发高性能的服务端和客户端。简化了NIO的开发流程。原生NIO存在的问题NIO 的类库和 API 繁杂,使用麻烦:需要熟练掌握 Selector、ServerSocketChannel、SocketChannel、ByteBuffer 等。要具备其他的额外技能:要熟悉 Java 多线程编程,因为 NIO 编程涉及到 Reactor 模式,你必须对多线程和网络编程非常熟悉,才能编写出高质量的 NIO 程序。开发工作量和难度都非常大:例如

2020-12-05 09:52:01 167

原创 【Netty】学习笔记(上)

概念基于TCP、异步、事件驱动的网络框架;TCP/IP --> 原生JDK(Java的IO和网络编程) --> NIO --> Netty;应用场景Netty是异步高性能的通信框架,往往被RPC框架使用;阿里云分布式框架Dubbo;游戏;地图框架AVRO(RPC),使用Netty Service进行二次封装;Akka;Flink;Spark;书籍『Netty in Action』实战『Netty权威指南』,知识点多,但其基于Netty5,目前已经过时不

2020-11-26 09:25:09 145

原创 LeetCode315 计算右侧小于当前元素的个数(分治求逆序数)

题目链接:leetcode315给你一个数组,让你求每个位置的数后面比它小的数的数量。也就是以每个数字为头的逆序对的数量。解题思路树状数组、线段树先离散化一下,然后逆序统计每个位置前比该数字小的数。分治先离散化,再利用归并排序把数组逆序,并求后面的区间对前面区间的贡献。代码分治class Solution {public: vector<int> countSmaller(vector<int>& nums) { int n =

2020-10-31 17:51:25 198 1

原创 LeetCode777 在LR字符串中交换相邻字符(双指针)

题目链接:leetcode777题面题目大意L只能左移,R只能右移,并且移动的时候旁边要有X帮助,问能否从当前移动到目标串。解题思路对于一个串,我们只需要考虑非『X』的元素,因为一旦其他两者复原则『X』也随之复原。广搜口胡一下,空间复杂度可能很高,并且时间复杂度也不低,可以用双向广搜优化一下。代码略。双指针我们从左到右扫,如果当前串和目标串最近的一个非「X」元素不相等,则一定不能复原,因为无论如何都会存在两个移动区间相交的点;如果只能目标串的元素在当前元素能移动的相反方向,则也不能复

2020-10-20 22:12:32 291

原创 第十一届蓝桥杯大赛软件类省赛第二场 C/C++ 大学 B 组

试题 A: 门牌制作 本题总分:5 分【问题描述】小蓝要为一条街的住户制作门牌号。 这条街一共有 2020 位住户,门牌号从 1 到 2020 编号。 小蓝制作门牌的方法是先制作 0 到 9 这几个数字字符,最后根据需要将字 符粘贴到门牌上,例如门牌 1017 需要依次粘贴字符 1、0、1、7,即需要 1 个 字符 0,2 个字符 1,1 个字符 7。 请问要制作所有的 1 到 2020 号门牌,总共需要多少个字符 2?【答案提交】这是一道结果填空的题,你只需要算出结果后提交即可。本题的结果为一

2020-10-20 20:44:51 1979 8

转载 【算法设计与分析】算法的时间复杂度(介绍O渐近上界,Ω渐近下界,θ准确的界)

什么是时间复杂度?我们先看看一些函数的渐近表达式:关于时间复杂度的基本要点:时间复杂度反映的是随着问题规模的变大,计算所需的时间的增长速度,与系数的多少关系不大算法的渐近时间复杂度,简称时间复杂度,很多时候为了便于理解,直接把时间复杂度等同于O()是可以的。常见的时间复杂度,及其增长速度比较:O(1)<O(log2n)<O(n)<O(nlog2n)<O(n2)<O(n3)<O(2n)<O(n!)<O(nn)O(1)<O(log_2n)<O(n)<O(nlog_2n)<

2020-10-16 10:16:13 9739 1

转载 两个栈对元素进行升序排列

注:转自栈的面试题—对栈进行升序排列题目描述请编写一个程序,按升序对栈进行排序,要求最多只能使用一个额外的栈存放临时数据,但不得将元素复制到别的数据结构中。vector数组numbers中的第一个元素就是栈顶元素,升序排列,即栈顶元素最大解题思路看到这个题,因为可以申请一个栈用来存放临时数据,所以我们可以这样想:由于栈先进后出的特性,先将原来栈中的数据存放到临时数据栈中,并且保证临时栈中的数据是降序排列的,这一过程完成之后,再将临时数据栈中的元素依次push到返回栈中即可。具体实现步骤:(

2020-10-08 20:42:09 676

原创 HDU4763 Theme Section(KMP)

题目链接:hdu4763题面题目大意找到字符串中的最长公共前后缀,并且这个前后缀的字串在除了前后缀的中间部分也要存在这个子串。例如:EAEBE,其中,E 表示这个子串,输出 E 的最大长度,如果不存在输出 0 。解题思路KMP利用求失配函数得到串的最长公共前后缀,然后从 2i 的位置到 len-i 的位置开始枚举中间是否存在子串,判断条件是: fail[j]==ifail[j]==ifail[j]==i。含义是失配指针能够索引到公共前缀后一个位置,然后从 j 位置到达 i 表示 0 - j

2020-10-06 21:10:55 133

原创 LeetCode442 数组中重复的数据(哈希)

题目链接:leetcode442题面题目大意略解题思路哈希这种问题大致可以分成两类,如果找重复两次的数可以用哈希;如果找不重复的数可以用异或,然后按某个位为 1 开始划分。本题要找重复两次的数,于是可以采用哈希,具体就是使得 nums(i)==inums(i)==inums(i)==i ,这样不重复的数一定归位,而重复的数一定有一个不能归位,那么找出那些不能归位的数即可。代码实现class Solution {public: vector<int> findDupl

2020-09-29 21:11:34 156

原创 LeetCode215 数组中的第K个最大元素(分治 | 快速排序)

题目链接:leetcode215题面题目大意求数组中第k大的数,注意区分第k大和第k小。解题思路暴力每次选取一个当前最大值,重复 K 次即可找到答案时间复杂度 O(nk)O(nk)O(nk),空间复杂度 O(1)O(1)O(1) 。大根堆维护一个大根堆,取前 K 个堆顶元素即可找到答案。时间复杂度 O(n+log2nk)O(n+log_2n^k)O(n+log2​nk),空间复杂度 O(n)O(n)O(n)。分治实际上就是利用快速排序的思想,每次去确定一个数的位置,然后分治

2020-09-29 19:56:56 453

原创 LeetCode793 阶乘函数后K个零(二分+数论)

题目链接:leetcode793题面题目大意f(x)f(x)f(x) 函数是一个求 x!x!x! 结果尾部 0 个数的函数,现在给你一个 K ,让你求能够找到多少个 x 使得 f(x)=Kf(x)=Kf(x)=K 。解题思路首先,我们考虑这个 f(x)f(x)f(x) 函数,不难得出 x!x!x! 尾部 0 的个数等于该数 2 和 5 因子的组数。分别考虑 x!x!x! 的 2 因子和 5 因子的个数取最小值即两个因子的组数,显然,对于 n!n!n! , 5 的因子个数一定小于 2 的因子,

2020-09-28 21:57:22 231

原创 LeetCode81 搜索旋转排序数组 II(二分)

题目链接:leetcode81题面题面大意33 题的延伸,略解题思路二分和 154 优化 153 的一样,当不能确定是左区间还是右区间时,把区间长度减一。数组存在大量重复元素时,时间复杂度退化到 O(n)O(n)O(n)。代码实现class Solution {public: bool search(vector<int>& nums, int target) { if (nums.size() == 0) return false;

2020-09-28 17:53:04 149

原创 LeetCode33 搜索旋转排序数组(二分)

题目链接:leetcode33题面题目大意做法和 153 比较类似,属于二分搜索某个值的问题。解题思路暴力略二分153 那题是夹逼出一个最小值,也就是一定有答案。而本题不同,可能没有这个数,在二分结束的时候需要判定一下是否找到答案。当然,做法类似,都是先确定 mid 所在的位置是在间断点的左边或者是右边,然后再根据各自的区间去划分。注意根据二分的写法对边界情况的判定。代码实现class Solution {public: int search(vector<i

2020-09-28 17:48:13 112

原创 LeetCode154 寻找旋转排序数组中的最小值 II(二分)

题目链接:leetcode154题面题目大意具体题意和 153 那道一样,只不过多了一个元素重复的条件。解题思路暴力略二分做法和 153 一样,只不过对于 mid 和 右端点相等时,我们把区间 - 1 即可。当然,在有大量重复元素的情况下,时间复杂度会退化到 O(n)O(n)O(n)。注意:这两题的右边界 r 都被设为 n - 1 ,这是因为我们知道数组中一定有答案,则如果和正常的二分那样设置在 n 的未知,则最后结束循环的时候 l 可能越界到达 n 。此外,如果初始设置在 n

2020-09-28 17:33:29 114

原创 LeetCode153 寻找旋转排序数组中的最小值(二分)

题目链接:leetcode153题面题目大意题目中的旋转可以理解成整个有序数组循环左移,找旋转点相当于找这个左移的开头,由于原序列有序,相当于找数组的最小值。数组中的元素不重复!解题思路暴力遍历一次数组,寻找最小值。时间复杂度 O(n)O(n)O(n) ,空间复杂度 O(1)O(1)O(1)。二分由于原序列有序,根据左移的特性,我们可以进行二分:如果 mid 的元素值小于等于右端点的元素值,显然旋转点就在 mid 的左边,则此时 r = mid否则旋转点在 mid 的右边,则

2020-09-28 17:17:51 129

原创 LeetCode144 二叉树的前序遍历(Morris遍历 | 非递归栈遍历)

题目链接:leetcode144题面题目大意略解题思路大致方法有递归、利用栈实现非递归以及Morris遍历,对于Morris遍历可以看这篇文章 传送门。其中递归和非递归栈空间复杂度都是 O(log⁡2n)O(\log_2n)O(log2​n) ,Morris 遍历空间复杂度为 O(1)O(1)O(1) 。代码实现Morris 遍历/** * Definition for a binary tree node. * struct TreeNode { * int val;

2020-09-26 23:33:02 185

原创 LeetCode143 重排链表(双指针)

题目链接:leetcode143题面题目大意略解题思路首先用快慢指针找到链表的中点,并分成两个链表,为了方便操作,前面的链表的长度要大于等于后面的链表;接着,把后面的链表逆置,为了方便操作,前面链表的链尾可以暂时称位后面链表的头节点;最后将两个链表归并,由于归并操作要交替插入,于是我们结束的标志是后面链表完全插入到前面的链表的时候算法结束,这也是为什么我们要使得前面的链表元素不小于后面链表的原因。时间复杂度 O(n)O(n)O(n),空间复杂度 O(1)O(1)O(1)。代码实现/**

2020-09-26 22:21:52 110

原创 数据结构 外部排序(败者树、置换-选择排序、最佳归并树)

前言我们知道,计算机在处理数据的时候会先把数据读入内存,然后做相应操作后再写回内存。例如排序,当你内存大小大于数据量的时候,排序所要考虑的时间复杂度仅仅只有在内存中的部分,我们称它为内部排序;相对地,当内存不够,数据量大时,我们就要考虑分阶段进行排序,并且还伴随着大量的 I/O 操作,我们称后者为外部排序。本文主要讲外部排序中的败者树、置换选择排序、最佳归并树的算法原理,至于代码细节不做考虑。原理对于外部排序的顶层设计,我们大致可以归纳为三大步骤:首先,尽可能地读入数据到内存中进行内部排序,之后我

2020-09-26 14:03:35 2501

原创 数据结构 多重邻接表

前言有向图的表示结构有多种,由于其有向性,结构中要人为给它规定起点和终点。对于无向图,我们可以根据有向图的结构,加双向边进行实现,但除了空间翻倍外,在某些要对边进行标记的问题时,还要去找到反向边,有可能这个复杂度不是 O(1)O(1)O(1) 的,那么整体复杂度也会相应提升。于是,多重邻接表可以有效解决这个问题。本文主要介绍多重邻接表的概念、定义等。概念和十字链表类似,多重邻接表是无向图的一种链式存储结构,区别的是多重邻接表:对于结点的设置不再把出边和入边分成两张链表,而是一张链表表示邻边;对于

2020-09-24 00:00:03 466

原创 数据结构 十字链表

前言有向图有多种存储方式:邻接矩阵、邻接表、逆邻接表、十字链表等。本文主要介绍 十字链表 ,并给出其结构体定义以及相应图解。概念十字链表是有向图的一种链式存储结构,可以看成有向图的邻接表和逆邻接表结合出来的产物。他能根据一个结点的出度指针以及入度指针快速找到多条边以及计算结点的出入度。和邻接表类似,结点的结构顺序存储,边的结构链式存储,这样方便边去索引到结点。定义结点结构是一张顺序表,里面每个元素表示图中的一个结点,而指针域中的两个指针分别为出边和入边的弧链表。结点结构(VexNode)

2020-09-23 16:01:11 1473 3

原创 数据结构 广义表

前言顾名思义,广义表就是线性表的拓展。通俗地理解,就是对于之前定义的线性表只能操作本表内的逻辑,而广义表拓宽了这个定义,于是能指向其他广义表,也就是说表与表之间建立起了联系。概念简单地概况广义表:表元素可以是原子也可以是一个广义表地线性表的拓展结构。长度:最上层元素的个数,一个表可以指向其他广义表,此时其他广义表在本表中也抽象成一个元素;指向数据项也就是原子项,此时也为一个元素。深度:其指向其他广义表的最大深度,因为其他广义表还可能再指向另外的广义表,此时求这个拓展的最大深度。注意,这里是最大深

2020-09-23 12:21:17 1234

转载 联合体嵌套结构体的问题

#include <stdio.h>typedef union{unsigned int u;struct{unsigned char a :1;unsigned char b :1;unsigned char c :6;unsigned char d :1;} ST;}UN;int main(){UN.ST.u = 0;UN.ST.a = 1;UN.ST.b = 2;UN.ST.c = 3;UN.ST.d = 4;printf("%d\n", UN.u

2020-09-23 11:33:45 1235

原创 LeetCode 142 环形链表Ⅱ(双指针)

题目链接:leetcode142题面题目大意给你一个链表可能有环,如果有环输出环的入口节点,否则输出 NULL解题思路双指针首先快慢指针进行找环,之后根据滑动窗口寻找入口。我们可以大致证明一下:假设慢指针走的长度为 lalala ,快指针走的长度为 lblblb ,整个链表的节点个数为 sss。那么,整个环的长度可以等于 lb−lalb-lalb−la,非环部分的长度为 s−(lb−la)s-(lb-la)s−(lb−la) ,又因为快指针的长度为慢指针的两倍,即 lb=2lalb=

2020-09-22 23:58:18 652

原创 AOE-网和关键路径算法

前言对于一个工程项目,在管理的时候可以将其按规模、功能等特征划分成不同的模块,而当各个小模块完成并进行整合后整个项目也就相应完成。在划分的方法中,主流的方法是按事件、活动的方式进行划分,并且为了直观表示,可以对应到一张有向图中(一般是DAG图)。对于管理者总是关心各个模块的完成时间节点以及整体模块的完成时间时间节点,这些节点我们对于到图中的点 Vertex ,也成为事件,表示这个时间节点 A 事件完成;对于模块完成所要付出的前置工作我们将其对于到图中的边 Edge,也叫做活动,表示完成事件 A 的前置任

2020-09-22 17:55:06 1553

原创 LeetCode138 复制带随机指针的链表(思维)

题目链接:leetcode138题面题目大意构造一个和原链表一模一样的链表,包括 random 指针。注意的是,操作结束后,原链表的结构不能被破坏。解题思路map根据结构,我们可以先构造出和原链表一模一样的链表,并使每个节点一一对应,这边可以使用一个 map 。然后遍历原链表的所有节点,对于原链表的random 指针我们可以根据查询 map 的内容进行相应的 random 指针修改。时间复杂度 O(nlogn)O(nlogn)O(nlogn),空间复杂度 O(n)O(n)O(n)。把

2020-09-21 18:44:38 99

原创 LeetCode134 加油站(贪心)

题目链接:leetcode题面题目大意gas表示到达 i 位置后能得到的充值cost表示从 i 离开后需要的消费问是否能够从前往后绕一圈回到原点解题思路易错点对于一个起点,即使途中所有的充值和消费大于等于0,但是途中某个位置一旦没油了就会终止。枚举枚举所有起点,暴力检查。时间复杂度 O(n2)O(n^2)O(n2),空间复杂度 O(1)O(1)O(1)。贪心容易想到能绕一圈的前提是所有的所有点的充值和消费求和要大于等于0,在此前提我们去找起点。对于一个合法的起点,我们应该尽

2020-09-21 10:44:57 113

原创 LeetCode 96 不同的二叉搜索树(动态规划 | 递推 | Catalan数)

题目链接:leetcode96题面题目大意求 n 个数字构成的二叉搜索树的种类数量解题思路与本题等价的题目有:凸多边形划分三角形的数量、一串数字通过栈构成的出栈序列数量、2n 长度的 01 串的种类(限制是前缀 1 的数量不少于 0 )等,最终其实可以归结于 Catalan 数的计数问题。以下主要介绍两种动态规划思想的递推,为了方便讲解,问题不妨假设转化为数字的进栈出栈问题:递推我们考虑,对于一串规模为 n 的数字,对于状态 f[i]f[i]f[i] 表示把第 iii 个数字为开头的出栈

2020-09-20 10:13:46 179

原创 LeetCode117.填充每个节点的下一个右侧节点指针 II(思维+dfs)

题目链接:leetcode117题面题目大意给你一个二叉树,树节点指针域中多给了一个next指针,让你在时间复杂度尽可能优的情况下把每层的节点利用next指针串成一个链表。解题思路BFS(二叉树层次遍历)利用队列,额外维护一个树的高度,之后按高度把每层的next指针串连起来。但由于使用到额外的空间,显然不是本题的最优解。时间复杂度:O(n)O(n)O(n),空间复杂度:O(n)O(n)O(n)。DFS+栈我们不难发现,需要处理 next 指针的节点除了整棵树的最右侧链外其余均需要。而

2020-09-19 08:30:03 133

转载 算法复杂度分析中的符号(Θ、Ο、ο、Ω、ω)简介

Θ,读音:theta、西塔;既是上界也是下界(tight),等于的意思。Ο,读音:big-oh、欧米可荣(大写);表示上界(tightness unknown),小于等于的意思。ο,读音:small-oh、欧米可荣(小写);表示上界(not tight),小于的意思。Ω,读音:big omega、欧米伽(大写);表示下界(tightness unknown),大于等于的意思。ω,读音:small omega、欧米伽(小写);表示下界(not tight),大于的意思。大O符号(英语:Big O n

2020-09-17 10:56:38 6148

原创 LeetCode109 有序链表转二叉搜索树(分治 | 双指针)

题目链接:leetcode109题面题目大意给你一个有序数组,让你转成一个平衡的二叉搜索树解题思路乍一看这道题似乎要构造一个 平衡二叉树,而平衡二叉树的实现方法有多种,例如: SplayTree、AVLTree、SBTree、RBTree等。但代码量感人,根据他人思路大致总结如下几种方法:寻找中位数+分治具体思路就是每次对于一个有序链表,取中位数作为根节点,之后左半边和右半边分别递归构造子树。能否满足平衡的限制呢?我们发现左右区间的元素数量最多相差 1 个,显然满足。如何寻找中位数呢?数

2020-09-17 10:08:05 139

C语言求职招聘程序小Demo

对于C语言语法的综合应用,其中包括:指针,文件,键盘读入操作等,当中还利用到了数据结构中的链表结构。以及对于程序的说明书以及分析导图。

2019-02-27

空空如也

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

TA关注的人

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