自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+
  • 博客(37)
  • 收藏
  • 关注

原创 【算法2-1】前缀和、差分与离散化

由于本题涉及到线路问题,需要统计Uim途径每条线路的次数,而且Uim每次的轨迹都是很长一段路径,所以需要使用一个合理的数据结构来维护区间的变化,首先想到线段树和树状数组,但是由于本题可以直接采用差分数组来维护变化情况,故采用最简单的方法。

2024-02-20 21:21:56 256

原创 【数学1】基础数学问题

题目需要求 n 个数中出现奇数次的那个数,且保证这个数存在且只有一个。于是我们根据上面两个性质得出,答案就是这 n 个数的异或和。

2024-02-05 16:47:56 295

原创 【数据结构1-4】图的基本应用

由于本题最多有1e5个顶点,如果采用邻接矩阵存储图的话需要4*1e10 Byte空间,显然会超内存,因此这里采用邻接表的方法存储。但需要注意的是,本题并没有使用广义上的邻接表,而是使用vector和array结合的方式存储,先用Edge数组存储边,并赋予每条边一个序号,然后用二维vector数组模拟邻接表,一维空间存储顶点的编号,二维空间存储该点所连接的边的序号。本题是图的遍历模板题,需要使用DFS和BFS遍历方法。

2024-01-31 16:08:14 438

原创 【数据结构1-3】集合

有时候,我们并不关心数据之间的前后关系,也不关心数据的层次关系。一些确定元素只是单纯的聚集在一起,这样的元素聚集体被称为集合。当希望知道某个数据是否存在一个集合中,或者两个元素是否在同一个集合中时,就需要使用一些集合数据结构来维护集合元素之间的关系。

2024-01-28 17:22:19 1508

原创 【数据结构1-2】二叉树

树形结构不仅能表示数据间的指向关系,还能表示出数据的层次关系,而有很明显的递归性质。因此,我们可以利用树的性质解决更多种类的问题。但是在平常的使用中,我们并不需要使用这么复杂的结构,只需要建立一个包含int right和int left的结构体即可,left和right用于指示该节点的左儿子和右儿子。

2024-01-26 22:31:11 865 1

原创 【数据结构1-1】线性表

线性表是最简单、最基本的一种数据结构,线性表示多个具有相同类型数据“串在一起”,每个元素有前驱(前一个元素)和后继(后一个元素)。根据不同的特性,线性表也分为数组(vector)、栈(stack)、队列(queue)、链表(list)等等。根据这些特性和数据结构可以解决不同种类的问题。

2024-01-25 21:39:18 854

原创 算法分析与设计

【代码】算法分析与设计。

2023-12-01 17:23:07 59

原创 【算法1.1】模拟与高精度

模板代码: 例1:A+B Problem加法逻辑:先执行对位上的加法,如果和大于10,那么给高位的格子加上数字1;全部加完以后,整理最高位格子里面的数字,如果发现大于10,直接向更高位进位。例2:A*B Problem 乘法逻辑:只需要模拟1位数和多位数的乘法即可,将每组结果错位相加,加法逻辑参照例1。但是需要注意的是,如果乘数中有0的情况要单独考虑,因为程序最后清算的时候会将高位0全部去掉。例3:阶乘之和 阶乘逻辑:高精乘+高精加。创建两个数组,用一个数组保存当前数的阶乘,运

2023-11-27 23:04:00 414

原创 算法基础提升——大数据问题和位运算(C++)

32位无符号整数的范围是0~4,294,967,295,现在有一个正好包含40亿个无符号整数的文件,所以在整个范围中必然存在没出现过的数。可以使用最多1GB的内存,怎么找到所有未出现过的数?【进阶】 内存限制为 10MB,但是只用找到一个没出现过的数即可。有一个包含100亿个URL的大文件,假设每个URL占用64B,请找出其中所有重复的URL。【补充】 某搜索公司一天的用户搜索词汇是海量的(百亿数据量),请设计一种求出每天热门Top100 词汇的可行办法。

2023-10-31 18:00:02 98

原创 算法基础提升——二叉树的树型dp和Morris遍历(C++)

从二叉树的节点 A 出发,可以向上或者向下走,但沿途的节点只能经过一次,当到达节点 B 时,路径上的节点数叫作 A 到 B 的距离。现在给出一棵二叉树,求整棵树上每对节点之间的最大距离。二叉树节点间的最大距离问题__牛客网派对的最大快乐值__牛客网整个公司的人员结构可以看作是一棵标准的多叉树。树的头节点是公司唯一的老板,除老板外,每个员工都有唯一的直接上级,叶节点是没有任何下属的基层员工,除基层员工外,每个员工都有一个或多个直接下级,另外每个员工都有一个快乐值。

2023-10-28 21:28:27 78

原创 算法基础提升——滑动窗口和单调栈(C++)

单调栈的目的是为了找到一个元素左边离它最近的且比它大的数及右边离它最近的且比它大的数。例如列表[8,5,4,6,7,],对于4来说,我们需要找到的是5和6;对于6来说,我们需要找到的是8和7。如果采用暴力方法,时间复杂度为,如果采用单调栈方法,时间复杂度为。单调栈也需要维持一个单调递减或递增的结构,若要求离某个数最近且比它大的数,使用栈底到栈顶单调减的结构;反之则使用单调增的结构。例如[5,4,3,6,1],求每个元素左边离它最近的且比它大的数及右边离它最近的且比它大的数,使用单调减结构。

2023-10-27 17:01:10 177 1

原创 算法基础提升——KMP,Manacher算法(C++)

【代码】算法基础提升——KMP,Manacher算法(C++)

2023-10-25 21:44:01 44

原创 算法基础提升——哈希函数和并查集(C++)

现在有40亿个数,数据均匀分布在0 ~上。要求在1G内存限制下,统计每个数字的出现次数,并输出出现次数最多的数字。insert(key):将某个key加入到该结构,做到不重复加入。delete(key):将原本在结构中的某个key移除。getRandom(): 等概率随机返回结构中的任何一个key。【要求】 Insert、delete和getRandom方法的时间复杂度都是O(1)布隆过滤器(Bloom Filter)实际上是一个很长的二进制向量和一系列随机映射函数。

2023-10-24 17:37:59 321

原创 算法基础提升——动态规划(C++实现)

【题目】 假设有排成一行的 N 个位置,记为 1~N(N 一定大于或等于 2)。开始时机器人在其中的 M 位置上(M 一定在 1~N 中),机器人可以往左走或者往右走,如果机器人来到 1 位置, 那么下一步只能往右来到 2 位置;如果机器人来到 N 位置,那么下一步只能往左来到 N-1 位置。规定机器人必须走 K 步,最终能来到 P 位置(P 也一定在1~N 中)的方法有多少种。给 定四个参数 N、M、K、P,返回方法数。【举例】 N=5,M=2,K=3,P=3。

2023-10-20 21:33:00 188

原创 算法基础——暴力递归(C++实现)

相传在古印度圣庙中,有一种被称为汉诺塔(Hanoi)的游戏。该游戏是在一块铜板装置上,有三根杆(编号A、B、C),在A杆自下而上、由大到小按顺序放置n个金盘。游戏的目标:把A杆上的金盘全部移到C杆上,并仍保持原有顺序叠好。打印n层汉诺塔从最左边移动到最右边的全部过程。操作规则:每次只能移动一个盘子,并且在移动过程中三根杆上都始终保持大盘在下,小盘在上,操作过程中盘子可以置于A、B、C任一杆上。题目给出一个字符串,要求打印出它所包含的所有子序列,包括空字符串。

2023-10-19 23:35:43 190

原创 (3)详解桶排序及排序大总结(C语言数据结构及算法)

2.将堆顶数与堆底数(完全二叉树中最后面的数)交换位置,最大数被放在队尾并移出堆结构。1.把无序数组构成大根堆(heapInsert函数),此时最大值被放在堆顶位置。3.将得到的新堆重新构成大根堆(heapify函数),第二大的数被放在堆顶位置。4.将堆顶数与堆底数(完全二叉树中最后面的数)交换位置,第二大的数被移出堆结构。5.重复上述操作,直到所有数都被移出堆。,上面两个重要操作的时间复杂度为。上面两段代码的时间复杂度都是。

2023-07-14 15:17:20 67

原创 (2)认识复杂度O(NlogN)的排序算法(C语言数据结构及算法)

(1)工作原理:使用递归函数,将无序数组不断二分成左右两个部分,每次递归返回左右两侧最大的数,直到无法划分为止。递归过程类似er于后序遍历的压栈过程。求中点的过程中若使用下面的写法,很容易导致溢出的现象发生:当L和R都足够大时,L+R会超出范围,若采用mid = L+(R-L)/2这种写法,可以避免出现L+R。

2023-07-13 21:21:16 126 1

原创 (1)简单排序算法详解(C语言数据结构及算法)

第一次从待排序的数据元素中选出最小(或最大)的一个元素,存放在序列的起始位置(或末尾位置),然后再从剩余的未排序元素中寻找到最小(大)元素,继续放在起始位置(末尾位置),直到未排序元素个数为0。相邻的元素两两比较,较大的数下沉(往后移动),较小的数冒起来(往前移动),这样一趟比较下来,最大(小)值就会排列在一端。在冒泡排序中,遇到相等的值,是不进行交换的,只有遇到不相等的值才进行交换,所以是。在选择排序中,每趟都会选出最大元素与最小元素,然后与两端元素交换,此时,) ,平均时间复杂度是O(

2023-07-10 22:28:53 76 1

原创 计算机网络(自顶而下方法)第六章——链路层与局域网

节点:运行链路层协议的所有设备,包括主机,路由器,WiFi交换机等。链路:沿着通信路径连接相邻节点的通信信道。分为有线和无线两种链路。链路层帧:承载数据报并在链路中传输的载体,与网络层数据报相比多了链路层首部。链路层的主要功能:负责将数据报通过链路从一个节点传输到物理上相邻的节点。把链路层帧的传输比作旅行,那么游客相当于数据报,从出发地到目的地的路径相当于一条链路,高铁,飞机等交通方式相当于不同的链路层协议,旅行社相当于路由选择协议(为游客规划路径)6.1.1 链路层提供的服务。

2023-05-20 16:31:15 182

原创 计算机网络(自顶而下方法)第二章——应用层

参考书目:《(自顶而下方法)第八版》参考原文:https://blog.csdn.net/qq_39326472/article/details/88089747。

2023-05-18 19:47:58 121

原创 计算机网络(自顶而下方法)第一章——计算机网络与因特网

视角一——互联网的构成:包括连接在因特网上数以十亿的计算机设备,通信链路,分组交换机,以及网络应用程序等。视角二——因特网能提供的服务:为应用程序提供服务的基础设施,为应用程序提供的编程接口(API)等。分组是由数据段和必要数据组成的,其中的必要数据为分组接收者理解用户数据提供保障,而协议就是如何使用必要数据理解用户数据的方法或者规则;分组接收者接收到分组并按照协议获得了用户数据后,还应该对此消息做出反应,而如何做出反应也是协议规范的一部分。一个协议定义了在两个或者多个通信实体间交换的报文格式和。

2023-05-17 22:13:51 161

原创 信息隐藏(C语言实现BMP位图信息隐藏)

(1)先对待隐藏的文本信息加密,然后再将密文隐藏到24位bmp位图中。这里使用凯撒密码(密钥为3的移位密码)先将明文转换成密文后再隐藏到位图中。(1)将指定的文本信息隐藏到24位bmp位图中。信息隐藏的具体实现方法为最低有效位(LSB)方法,将密文插入像素颜色值的最低有效位中,由此引发的RGB颜色值的微小变化人眼无法感知。分析按照(1)中方法生成的携密图像,从中提取出密文的信息并输出,注意要将二进制密文还原成字符串。(2)从按照(1)中方法加密的位图中恢复隐秘的文本信息。

2023-05-14 11:28:28 41

原创 网上冲浪(C语言实现)

The__Flash 的初始网页是 “https://www.baidu.com/”(不包括引号),此时上一个网页和下一个网页都不存在。The__Flash 非常喜欢在互联网上冲浪,在各个网页上浏览信息。但她有个奇特的癖好,那就是她只在浏览器默认标签页的地址栏上键入新网页地址,通过后退按钮访问上一个网页,前进按钮访问下一个网页,绝对不会新开第二个标签页。forward:通过前进按钮访问下一个网页,若下一个网页不存在则停留在当前网页。back:通过后退按钮访问上一个网页,若上一个网页不存在则停留在当前网页。

2023-05-13 17:44:54 500

原创 密码学原理——使用穷尽密钥搜索方法破译移位密码

通过对每种密钥情况破译下的结果,结合英语知识,判断出当Key = 10时,明文是有意义的。(看天上,是一只鸟,是一架飞机,是一位超人)

2023-04-27 16:37:59 682

原创 计算机网络(自顶而下方法)第四章——网络层

网络层的目标:实现主机到主机的通信。为运输层提供支持:运输层实现进程到进程间的通信依赖于网络层提供的服务。为实现源主机到目标主机成功的移动数据分组,整个路径上的每一台分组交换机上均需实现网络层。网络层的主要功能:当一个分组到达路由器的一条输入链路时,路由器上的网络层根据转发表和分组头部信息,将分组向适当的链路转发。(数据层面)分组从发送方流向接收方时,网络层必须决定这些分组所采用的路由或路径,选路的结果反映为设备上的转发表,通过路由选择算法实现。(控制层面)

2023-04-11 21:04:29 444

原创 计算机网络(自顶而下方法)第三章——运输层

传输层协议为运行在不同端系统上的应用进程之间提供逻辑通信功能,

2023-04-05 17:23:21 382

原创 python基础——数据可视化

win+R快捷键打开cmd命令窗口,输入"pip install pyecharts"即可下载pyecharts包,下载完毕后输入python进入python环境中,输入import pyecharts,如果没有报错,说明成功安装。

2023-01-05 17:07:34 3620

原创 python基础——文件与IO

一、打开文件使用open打开函数,可以打开一个已经存在的文件,或者创建一个新文件,语法如下:open(name,mode,encoding)name:要打开的目标文件的文件名(或地址)mode:设置打开文件的方式,只读,读写,追加等encoding:打开文件的编码格式,推荐使用utf-8​

2023-01-04 17:07:58 237

原创 Python基础——函数进阶

当函数段运行到return行的时候,函数会返回一个值,然后退出函数段,那么如果我想要函数能返回多个值该怎么办呢?用“ ,”将两个返回值分割开,然后用两个变量分别接收就可以了,还可以用一个变量接收,系统会返回一个包含所有返回值的元组。此外,返回值的类型是不受限的,可以返回字符型,整形,布尔型等等。

2022-12-29 15:54:19 76

原创 Python基础——模块

模块是一种可重复使用的代码,当有需要时,可以直接调用。Python中有大量内置模块和可自定义模块。

2022-12-19 15:36:31 111

原创 Python基础——异常

当出现异常时,程序往往会中断报错甚至直接退出,而在程序的运行中经常会出现不可预料的错误,例如,当用户在app上输入不合规范的数据时,程序会抛出ValueError的错误后闪退,这对用户非常不友好,所以我们往往需要预料到可能会出现的异常,然后做出处理,确保程序不会无缘无故地退出。当需捕获全部的错误时,可以直接用Exception代表所有异常,同时,将异常名指定为e,可以同时输出e达到确定错误类型的目的。当异常出现在子程序中时,可以通过主函数中的子函数调用传递到主函数中,使主函数也报错。

2022-12-19 14:56:35 703

原创 C语言——用递归处理汉诺塔问题

相传在古印度圣庙中,有一种被称为汉诺塔(Hanoi)的游戏。该游戏是在一块铜板装置上,有三根杆(编号A、B、C),在A杆自下而上、由大到小按顺序放置n个金盘。操作规则:每次只能移动一个盘子,并且在移动过程中三根杆上都始终保持大盘在下,小盘在上,操作过程中盘子可以置于A、B、C任一杆上。游戏的目标:把A杆上的金盘全部移到C杆上,并仍保持原有顺序叠好。将n-1只碟子再递归到n-2,n-3……直到最后只有1只碟子时返回。采用递归的方法,将处理过程拆分为3步。

2022-12-18 13:42:14 173

原创 Python程序设计——邮件处理

1.SMTP发送电子邮件Python标准库提供了smtplib模块,用于实现SMTP协议,发送邮件。Python创建SMTP对象的语法为:

2022-12-17 16:23:19 517

原创 C语言数据结构——用链表实现两个一元稀疏多项式的合并

1. 功能需求对两个一元稀疏多项式进行加法运算,运算结果按照幂次从高到低依次输出多项式的幂次和系数。2 .输入输出需求对两个一元稀疏多项式进行加法运算。输入形式:c1 e1 c2 e2...... cn1 en1 ;c1' e1' c2' e2'........cn2' en2'ci,ci'为整数,分别为两个多项式第i项的系数;ei,ei'为整数,分别为两个多项式第i项的指数,指数乱序排列。输出形式:将运算后的结果多项式按幂次降序排列,依次输出结果多项式,结果要求与多项式形态要

2022-12-16 20:27:47 1574

原创 Python程序设计——正则表达式

正则表达式,顾名思义,是符合一定规则的表达式,是用于匹配字符串中字符组合的模式。常用作文本编辑器中检索,替换的功能或对输入的字符串进行合法性验证。例如:在输入邮箱用户名时,系统会对输入进行合法性验证,如果不符合邮箱用户名(6-18个字符,可使用字母,数字,下划线,需以字母开头,后加@以及邮箱地址等)的格式,就会报错,这里所使用的验证方式一般就是正则表达式。正则表达式的设计思想就是使用一些描述性的符号和文字为字符串定义一个规则,凡是匹配这个规则的,程序就认为该文本是匹配的,否则就是不匹配的。

2022-12-15 16:21:33 454

原创 C语言数据结构——用链表处理约瑟夫问题

约瑟夫问题:有n只猴子,按顺时针方向围成一圈选大王(编号从1到n),从第1号开始报数,一直数到m,数到m的猴子退出圈外,剩下的猴子再接着从1开始报数。就这样,直到圈内只剩下一只猴子时,这个猴子就是猴王,编程求输入n,m后,输出最后猴王的编号。2.当猴子报数为m时,将该猴子所表示的结点删除,并将下一个结点(猴子)标号为1,看作是下一趟报数的起点。1.由于猴子围成了一个圈,故此处使用循环链表的数据结构,将每只猴子看作是一个结点,用序号表示。3.如果不是m号猴子,不改变结点,指针指向下一结点。

2022-12-14 15:51:53 322

原创 C语言数据结构——用链表建立学生管理系统

运用链表的数据结构完成学生管理系统的创建,添加,修改,删除,显示等一系列操作。

2022-12-12 15:55:34 585 1

空空如也

空空如也

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

TA关注的人

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