- 博客(20)
- 收藏
- 关注
原创 递归与递推
1.2.思路:这里我们把一步操作后的状态一个点,每一步不同操作形成边连接不同状态的点,从初始状态到目标状态就是求两个点间的最短距离;数据范围:字符串长度最大为100,相邻硬币翻动一次,每次操作最多有99种选择,最多翻动50次达到目标状态(极端情况下,100枚硬币全部朝正面/反面=》<=50^99。以本题为例,当我们枚举到第u个位置的数,此时已经枚举完成u-1个数,剩下(m-start+1)个数,若。2.枚举a,a每个叶子节点枚举c,由 b = n * c - a * c 的出b并判断等式是否成立。
2024-06-25 01:52:17 446
原创 acwing搜索与图论
宽搜与深搜没有固定的模板,要理解其思想再具体到题目里,用邻接表存储/dfs bfs 遍历。只有所有边都是1,才可以用bfs求最短路。基础算法 搜索与图论 二、三未看。
2024-06-25 01:51:45 173
原创 贪心algo
贪心一般没有固定的套路或模板,只能不断尝试。每次我们选择局部问题的最优解不断走下去以达到全局的最优解代码一般比较好写但证明难一般直觉上想出一个做法然后证明为什么是正确的猜!
2024-05-27 23:23:23 175
原创 Acwing算法模板分析
基础算法3 01:12:31 离散化往后内容未看。未看:二维差分 797.差分矩阵 基础算法二。799.最长不重复连续子序列。一般用来求解开方后的结果。求某一段区间内所有数的和。差分可看作前缀和的逆运算。
2024-05-24 13:33:25 312
原创 数学与简单DP
每一个物品有两个属性–体积 V(i) 和价值 W(i) ,每件物品只能用一次(01 背包问题每一个物品只能用 1 次或 0 次,这也是 01背包问题的特点)。问题是:我们要从这些物品中挑出一些物品,使得总体积 <= 总体积 V ,也就是在背包能装的下的情况下,我们能装得下的最大的价值之和是多少?f ( i , j) 含义:表示所有只从前 i 个物品当中选出总体积 <= j 的选法的一个集合,存放的数是整个集合中所有选法的最大值。:我们需要用几维来表示状态/问题,每一个状态的含义又是什么。
2024-05-24 13:28:53 833 1
原创 C-数据的存储
char //字符数据类型short //短整型int //整形long //长整型long long //更长的整形float //单精度浮点数double //双精度浮点数//C语言有没有字符串类型?以及他们所占存储空间的大小。使用这个类型开辟内存空间的大小(大小决定了使用范围)。如何看待内存空间的视角。(类型决定数据看待及存储在内存空间中的方式)相同的数值,在不同数据类型下在内存空间中存储形式由数据类型决定什么大端小端:大端字节序存储模式和小端字节序存储模式。
2024-01-10 17:42:25 883
原创 百度面试题--动态内存分配、值传递、返回栈空间地址问题-C语言
,str成功存储这块空间地址,GetMemory()调用完毕生命周期结束,形参p销毁并将开辟的空间还给操作系统,此时仍然可以通过str找到这块内存,但这块空间内存放的是我们不清楚的一个随机值。但是被static修饰的变量存放在数据段(静态区),数据段的特点是在上面创建的变量,直到程序结束才销毁。3.2GetMemory()函数调用完毕,内部形参变量p销毁,不再记录开辟的内存块地址,此时str仍然存放空指针NULL,并没有指向一块有用的空间。4.代码段:存放函数体(类成员函数和全局函数)的二进制代码。
2024-01-10 17:41:34 916
原创 C语言指针进阶
下面代码哪个是数组指针?//p1, p2分别是什么?解释:p先和结合,说明p是一个指针变量,然后指着指向的是一个大小为10个整型的数组。所以p是一个指针,指向一个数组,叫数组指针。这里要注意:[ ]的优先级要高于号的,所以必须加上()来保证p先和*结合。
2023-12-19 15:33:48 832
原创 树与二叉树
设二叉树的根节点所在层数为1,层序遍历就是从所在二叉树的根节点出发,首先访问第一层的树根节点,然后从左到右访问第2层上的节点,接着是第三层的节点,以此类推,自上而下,自左至右逐层访问树的结点的过程就是层序遍历。而现实中使用中只有堆才会使用数组来存储,二叉树顺序存储在物理上是一个数组,在逻辑上是一颗二叉树。2.当前结点出来时,把它的左孩子和右孩子都带进去队列,这样上一层结点出的时候,带入下一层的结点。二叉树的链式存储结构是指,用链表来表示一棵二叉树,即用链来指示元素的逻辑关系。4.1二叉树链式结构的遍历。
2023-12-10 14:35:52 852
原创 C语言指针-初阶
char类型指针每次循环只能访问一个字节空间,循环10次后只能改变arr数组元素前十个字节数据,int类型数组共有10个元素,每个元素有4字节空间,最终只能改变数组中前两个半元素的值。允许指向数组元素的指针与指向数组最后一个元素后面的那个内存位置的指针比较,但是不允许与。概念: 野指针就是指针指向的位置是不可知的(随机的、不正确的、没有明确限制的)指针变量,用来存放地址的变量。short* 类型的指针是为了存放 short 类型变量的地址。char* 类型的指针是为了存放 char 类型变量的地址。
2023-11-08 15:28:08 55
原创 C语言qsort函数详解
例程:为了比较传入的数组元素的大小,我们需要编写一个自定义排序算法的函数称为例程,在这里传入函数的指针就可以通过函数指针调用这个函数进行排序。其中,cmp是函数指针,指针指向一个函数,这个函数需要我们自己编写,用来比较两个元素。是qsort在排序期间调用例程一次或多次,每次调用时传递指向两个数组元素的指针。是指向用户提供的例程的指针–也就是我们自己编写的排序函数的函数指针。void* base, //指向要排序的目标数组的指针。无具体类型指针,即可接收任何类型指针指向的地址。这里我们使用MSDN软件查找。
2023-11-06 21:46:56 144
原创 C语言动态内存函数---malloc、calloc、realloc、free函数
C语言提供动态内存开辟函数malloc开辟成功,返回指向一个开辟好内存空间的指针,失败则返回一个空指针NULL,在使用时要检查返回值类型函数向内存申请一块连续可用的空间并返回这块空间的指针,返回值类型为void*返回值的类型是 void *,所以 malloc 函数并不知道开辟空间的类型,具体在使用的时候使用者自己决定如果参数 size 为0, malloc 的行为是标准是未定义的,取决于编译器。//想内存申请10个整形的空间--返回值为void*,需要强制类型转换。
2023-11-05 00:41:47 76
原创 C语言文件操作
磁盘上的文件是文件。但是在程序设计中,我们一般谈的文件有两种:程序文件、数据文件(从文件功能的角度来分类的)。格式化形式写文件,在这里是将结构体中成员变量信息转换成相应变量格式写入到文件中格式化形式读文件,将文件信息格式化并输入到相应结构体成员变量中从键盘中输入数据并打印在控制台上从键盘输入,屏幕输出键盘–标准输入设备–stdin屏幕–标准输出设备–stdout标准输入、输出流–这里的流是指指针,当从程序文件输出到磁盘,这个指针叫输出流,反之为输入流。
2023-11-01 23:46:32 42
原创 C语言柔性数组
如果我们的代码是在一个给别人用的函数中,你在里面做了二次内存分配,并把整个结构体返回给用户。所以,如果我们把结构体的内存以及其成员要的内存一次性分配好了,并返回给用户一个结构体指针,用户做一次free就可以把所有的内存也给释放掉。C99中,结构中的最后一个元素允许是未知大小的数组,这就叫做『柔性数组』成员。·包含柔性数组成员的结构用malloc ()函数进行内存的动态分配,并且分配的内存应该大于结构的大小,以适应柔性数组的预期大小。sizeof返回的这种结构大小不包括柔性数组的内存。
2023-10-31 21:37:43 57
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人