- 博客(20)
- 收藏
- 关注
原创 返回给定二叉树中一层最多的节点个数(仅使用队列实现)
思路点拨:我们知道对二叉树实现层序遍历(也就是一层一层遍历)需要使用队列,而要找出节点最多的那一层,必然避不开要算出每一层节点的个数,那也就避不开层序遍历。除此之外,我们还需要维护几个变量:1:curend//当前层的最后一个节点2:nextend//下一层的最后一个节点3:curcount//当前层节点个数4:maxcount//最多的节点个数有了这几个变量,我们就可以完成这件事情,之后我们可以这样理解层序遍历:层序遍历时删除的都是当前层的节点,入的都是下一层的节点为了便于理解,先看一个例
2022-02-05 19:43:46
520
2
原创 和为 K 的最少斐波那契数字数目(贪心)
题目描述:给你数字 k ,请你返回和为 k 的斐波那契数字的最少数目,其中,每个斐波那契数字都可以被使用多次。斐波那契数字定义为:F1 = 1F2 = 1Fn = Fn-1 + Fn-2 , 其中 n > 2数据保证对于给定的 k ,一定能找到可行解。示例 :输入:k = 7输出:2解释:斐波那契数字为:1,1,2,3,5,8,13,……对于 k = 7 ,我们可以得到 2 + 5 = 7 。原题链接:1414. 和为 K 的最少斐波那契数字数——leetcode题目分
2022-02-04 15:00:13
768
原创 不要二(暴力+找规律)
题目描述: 二货小易有一个W*H的网格盒子,网格的行编号为0 ~H-1,网格的列编号为0 ~W-1。每个格子至多可以放一块蛋糕,任意两块蛋糕的欧几里得距离不能等于2。 对于两个格子坐标(x1,y1),(x2,y2)的欧几里得距离为: ( (x1-x2) * (x1-x2) + (y1-y2) * (y1-y2) ) 的算术平方根小易想知道最多可以放多少块蛋糕在网格盒子里。输入描述: 每组数组包含网格长宽W,H,用空格分割.(1 ≤ W、H ≤ 1000)输出描述: 输出一个最多可以放的蛋糕数 .
2022-02-03 15:30:11
341
原创 火柴棍等式(暴力枚举)
题目描述:给你n个火柴棍,判断能够构成多少个A+B=C(A,B,C为由0~9构成的正整数)形式的等式,其中+与=各由两个火柴棍构成,非零数字的最高位不为零,0 ~ 9的构成如下:时间限制:1sn<=24例子:n=18输出:9 ,因为可构成: 0+4=4、0+11=11、1+10=11、2+2=4、2+7=9、 4+0=4、7+2=9、10+1=11、11+0=11。题目分析:n个火柴棍,其中四个明确被使用,那只要通过不断对每个位置枚举,只要满足等式并且三个数的火柴棍总数等于n-4就满足
2022-02-02 15:21:11
859
原创 C语言基础——整型提升
整形提升:在表达式计算时,各种整形首先要提升为int类型,如果int类型不足以表示则要提升为unsigned int类型;然后执行表达式的运算。整形提升的原因与cpu运算数据效率和精度有关,就不介绍了,感兴趣的小伙伴可以自行了解❗❗❗如何提升?写出要整形提升的数据的补码观察原变量是有符号还是无符号有符号数在补码前面补变量里面存放的补码的最高位数字,无符号数在补码前面补0提升完毕道理大家都懂,不来个例子怎么理解int main(){ char a = 128; int b =
2022-01-16 17:11:59
270
原创 leetcode372——超级次方
题目链接:超级次方只是看到题目,还没看内容就觉得是要用快速幂来玩,但是做完后感觉还是遍历简单使用mod的性质:(a*b)%c=( a % c * b % c ) % c 来解决溢出class Solution {public: //计算c的seconary次方 int pow1(int c, int secondary) { int res = 1; while (secondary) { res = ((res%1337)*(c%1337)) % 1337; //上
2021-12-05 23:56:20
98
原创 KMP算法——详解next数组
令人烦恼的next数组,本文是作者自己的理解与思考,并不完善,只是为了提示自己,如果您已研究了KMP算法,本文对您的帮助并不大next数组完成的任务:当s1与s2字符串比较到上图所示位置时,拥有next数组的KMP算法不需要像BF算法一样:将 j 回退到开始的第二个字符将 i 退回到字符串头部而是:将 i 回退到第二个字符b处j 不动因为图示位置的前面都是匹配的字符 , 相匹配的字符串一定具有相同的前缀,所以b,c的比较就显得有点浪费资源,所以只需要找到相同的前缀就可以减少
2021-12-05 01:38:55
10825
7
原创 与类有关的各种初始化方法及问题
默认构造函数初始化对象的偏心处理默认拷贝构造函数初始化的浅拷贝核心::初始化列表(成员变量定义初始化的地方)static成员变量初始化问题class test0{private: int _x; int _y;public:};class test1{private: int _data; int * _pointer; test0 n0;//嵌套一个类对象public: };我们将使用上面的两个简单类完成本次实验,它们的成员函数没有写,是为了更好的演示。默认.
2021-10-17 23:06:52
272
原创 从预处理到链接
本文旨在理解从预处理到链接的过程,不会涉及很底层的东西预处理编译三级目录预处理预处理阶段由预编译器参与,主要做了这些事情:头文件的包含,将被包含文件插入到#include的位置;宏定义的替换,将所有使用到宏的地方用宏内容替换,并且删掉宏定义;条件编译,处理所有条件编译指令,如 #else,#if等等;注释的删除,删掉所有注释编译编译是核心,大部分工作都在编译阶段完成,也是本文的重点编译从整体上看好像就做了一件事:将源代码转换为汇编代码;为什么需要编译?因为机器只看的懂0和1组成的序
2021-10-01 22:09:19
114
原创 C++快速入门(命名空间,输入输出,缺省函数,函数重载)
这里写目录标题命名空间命名空间命名空间的作用:看一个实际项目开发中可能遇到的问题,A程序猿在用C写代码是使用了n这个变量,B程序猿在用C写代码时也使用了n这个变量,当两人将项目整合后运行时便会因为使用同名变量而出错,命名空间的出现就是为了解决这样的问题。命名空间常用吗?随便去找一个C++程序,你很难不看到这句代码:using namespace std;其中的std就是C++提供的标准库,我们使用的各种函数等都封装在其里面,使用的时候必须要写这句话,那学过C的小伙伴就要问了,为啥C语言不需要
2021-09-28 16:54:28
137
原创 从认识堆到堆排序一篇搞定(动图解释)
堆什么是堆?如何建堆?向下调整算法反向向下调整算法向上调整算法堆排序什么是堆?????像上面所展示的两个完全二叉树都称作为堆,第一个叫小堆,因为双亲结点的值都小于子节点,第二个叫大堆,因为双亲结点的值都大于子节点,如果一个二叉树不满足大堆或小堆的特征,就不叫堆。堆满足的性质:0️⃣:子节点都不大于或不小于父结点。1️⃣:是一个完全二叉树。数据结构在堆实现时用的是数组的形式,父节点和子节点之间下标的关系是:左子结点下标=父节点下标*2+1;右子节点下标=父节点下标*2+2;➖➖➖➖➖➖➖
2021-09-02 23:03:12
243
1
原创 单链表及单链表的三个初级算法思想
单链表的基础知识及三个初级算法思想单链表介绍单链表的增删查改初始化链表销毁链表查找指定结点在链表头部增加新结点在链表尾部增加新结点在链表中间某节点的后面增加结点删除链表的最后一个结点删除头结点OJ题算法思想1:删除数据等于val的结点 [leetcode链接](https://leetcode-cn.com/problems/remove-linked-list-elements/description/)2:反转链表 [leetcode链接](https://leetcode-cn.com/prob
2021-08-02 21:31:38
1428
原创 300行C代码完成动态通讯录管理
简单通讯录实现明确通讯录功能核心思想对象创建和初始化功能实现源码分享:明确通讯录功能本次带大家完成的是比较简单的通讯录,所以实现的功能也是比较简单,功能如下:1:向通讯录中添加成员2:删除成员3:修改成员4:显示全部成员5:按名字排序所有成员6:查找成员并显示7:退出核心思想动态通讯录管理的意思就是通讯录的大小是可以变化的,所以需要动态申请堆空间,我们就是对申请的连续的堆空间进行操作。对象创建和初始化在实现功能之前我们需要写的代码:1:创建人这个对象typedef struct
2021-07-19 09:17:18
231
原创 带你进入Linux的大门
Linux学习的重要性基础指令的学习ls指令:mkdir指令cd指令pwd指令rmdir指令Linux是一个操作系统,它的父亲是Unix,相较于Windows而言最大的优点就是安全性和稳定性比较高,所以当今互联网巨头们所使用的服务器都是搭载的Linux系统,这也就要求程序员必须熟练使用Linux操作系统,不然工作难找啊!Linux极高的安全性和稳定性所对应的就是较难的操作方式:“纯命令输入”,它不像Windows可以用鼠标双击等等,必须通过相应的命令来完成相应的操作,比如:cp指令可以完成文件或目录的拷
2021-05-31 01:12:26
450
1
原创 看了这篇博客,再也不害怕别人问我把不把握得住数据存储了
初学C语言的小伙伴们可能多数认为指针是C语言的重点,其实这只是表象,“内存”才是本质,学不好内存,C语言等于没学。内存如此重要,本篇博客就带大家来学习数据在内存中是如何存储的。数据在内存中的存储认识内存C语言的数据分类整形在内存中的存储认识内存我们可以将内存想象为这样:或者这样:对于32位的操作系统来说,系统为我们分配了4G的内存大小,2^32次方就是4G,用二进制表示就是从全0加到全1的二进制的总和,而这些二进制在内存中的表现就是地址,地址用16进制数字表示就是从0X00 00 00 00
2021-05-29 20:56:40
222
原创 8道大厂指针笔试题让你秒杀指针!!!
这篇博客收录了8道大厂的指针笔试题,这8道题涵盖的知识点比较全面,所以我认为有必要分享出来,相信只要理解这8道题,那其他的指针题都会迎刃而解。废话不多说,直接上题:第一题:int main(){ int a[5] = { 1, 2, 3, 4, 5 }; int *ptr = (int *)(&a + 1); printf( "%d,%d", *(a + 1), *(ptr - 1)); return 0;}读者可以先自己做一下,做出来后再来看解答哦;
2021-04-25 21:55:15
2731
12
原创 qsort函数实现对任意数据的排序
学会使用qsort函数排序qsort介绍compare函数介绍不同的数据类型相应的比较函数定义对数组元素为数字的:数组元素为字符时比较函数定义:结构体数据比较函数定义:qsort介绍qsort函数是一个库函数,它的作用是对数据进行排序,思想是:快速排序!因为是库函数,所以在使用的时候需要引头文件:<stdlib.h>/<search.h>我们可以通过以下的方式使用qsort函数:qsort( (void *)argv, (size_t)argc, sizeof( char *
2021-04-08 00:08:46
726
原创 C语言入门(基础二)
延续上作,本篇博客带大家继续入门C语言运算符C语言三大结构顺序结构选择结构循环语句四级标题五级标题六级标题运算符C语言为我们提供了很多的运算符,有单目运算符,双目运算符和三目运算符,这里的一目二目三目指的是操作的对象个数,我们可以使用这些运算符来解决一些实际的问题,接下来就一一认识一下吧:赋值运算符:‘=’就是赋值运算符,是双目运算符,可以使用它对变量进行赋初值,例如:我们在上面的代码中分别对a,b,c赋了初值,在后面我们使用到它们的时候它们的值就是我们赋给他们的,这就是赋值操作符。算术运算符:
2021-04-06 13:30:31
1349
4
原创 C语言入门(基础一)
这篇文章会带大家过一遍C语言的多数知识点,比较浅,受众应该是没学过编程但是想要入门的小伙伴第一个C程序关键字与标识符数据类型常量转义字符+阿斯克码值字符串第一个C程序为了让大家快速了解c语言的代码书写方式,这里给大家一个简单的C语言代码:#include <stdio.h>int main(){ printf("Hello world!\n"); return 0;}编译之后是这样的:对这个代码经行剖析:1:main是主函数(之后会提到),对每一个C程序来说都是不可或
2021-04-04 19:34:57
1827
4
原创 从今天加入CSDN大家庭
CSDN的小伙伴们,大家好,我是一名普通211的大一学生,专业并不是与编程相关的,在大一寒假前也并没有接触过编程,在寒假的时候我抱着好奇心接触了编程,之后便被其魅力吸引,在其中我也是找到了失去已久的成就感,我喜欢学习编程的知识,喜欢在出现bug的时候投入时间去找问题,当问题被解决的时候我就会感受到很很足的成就感。在经过一个寒假的学习后我也是决定毕业后从事编码相关工作,但是现在我还是相当于一名萌新,但是我的目标并不低,我希望能够通过自己的学习日后成为大牛,能够写出来完美的代码,在未来工作的时候能拿到高薪of
2021-04-01 09:11:35
1106
3
空空如也
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人