- 博客(41)
- 收藏
- 关注
原创 二叉树的深度
输入一棵二叉树,求该树的深度。从根结点到叶结点依次经过的结点(含根、叶结点)形成树的一条路径,最长路径的长度为树的深度。这个题目的话其实思路很好想到,我们如果按层遍历二叉树,那么二叉树的高度就等于层数;想到这里的话,这道题也就不难了。按层的话容易想到广搜的解法,把节点放到队列中,可是那样我们没办法记录层数,所以我们每次在从队列中弹出时先数下此时队列中的个数,对应的就是该层的个数,这时我们就可以
2018-01-16 20:14:42
271
原创 二分查找合集
在刷题时经常会用到二分,虽然每次磕磕绊绊的也都能写出来,可是也没去做个总结。今天又遇到了,我就做个总结吧。 在一个有序数组中,查找一个值为key的数,返回它的下标,若存在多个返回任意一个即可,若不存在就返回-1;int binary_search(vectorint> a, int key){ int len = a.size(); int left = 0, rig
2018-01-11 21:53:10
318
原创 sizeof运算符
sizeof 运算符的结果部分地依赖于其作用的类型: 对char或者类型为char的表达式执行sizeof运算符,结果得1。 对引用类型执行sizeof运算得到被引用对象所占空间的大小。 对指针执行sizeof运算得到指针本身所占空间的大小。 对解引用指针执行sizeof运算得到指针指向的对象所占空间的大小,指针不需要有效。 对数组执行sizeof运算得到整个数组所占
2017-06-22 20:42:01
532
原创 按层遍历二叉树
有一棵二叉树,请设计一个算法,按照层次打印这棵二叉树。 给定二叉树的根结点root,请返回打印结果,结果按照每一层一个数组进行储存,所有数组的顺序按照层数从上往下,且每一层的数组内元素按照从左往右排列。保证结点数小于等于500。具体要求如图所示: /*struct TreeNode { int val; struct TreeNode *left; struct Tre
2017-05-31 20:54:11
762
原创 重建二叉树
输入某二叉树的前序遍历和中序遍历的结果,请重建出该二叉树。假设输入的前序遍历和中序遍历的结果中都不含重复的数字。例如输入前序遍历序列{1,2,4,7,3,5,6,8}和中序遍历序列{4,7,2,1,5,3,8,6},则重建二叉树并返回。说起来一直以来并不是不会由前序遍历、中序遍历推出二叉树,但是一直以来都是死推,并没有从中找什么规律。今天看到这个题了,才发现其中的规律。前序的一个节点一定是根节点,然
2017-05-26 20:53:33
352
原创 回文数的判断
其实是很简单的一个东西,只不过觉得今天的写了之后看了别人的代码觉得挺有意思的,所以记录下来。 要求就是给一个int型的数,判断是否为回文数。 我的想法很简单,就是把这个数的每一个数字分离开放到一个数组,然后循环跑一遍判断是不是回文就好了。
2017-05-07 21:16:59
478
原创 用manacher算法求最长回文子串
好不容易看懂这个算法,赶紧记下来。。。 回文串就是一个不论是从前往后看还是从后往前看都是一样的一个字符串。在求回文串的时候难免会有因为串的长度为奇数还是偶数来分情况讨论,manacher算法为了避免这个问题,在字符串的前端和尾部以及中间位置都插入一个与该字符串无关的一个字符。例如字符串ababab,经过处理就会得到#a#b#a#b#a#b#,这样不管这个字符串在开始时为奇数还是偶数,经过处理都会变
2017-05-05 22:05:19
264
原创 堆排的实现
堆排实际上是一种选择排序,堆其实就是一棵完全二叉树,任何一非叶节点的关键字不大于或者不小于其左右孩子节点的关键字。 堆分为大顶堆和小顶堆,满足Key[i]>=Key[2i+1]&&key>=key[2i+2]称为大顶堆,满足 Key[i]<=key[2i+1]&&Key[i]<=key[2i+2]称为小顶堆。由上述性质可知大顶堆的堆顶的关键字肯定是所有关键字中最大的,小顶堆的堆顶的关键字是所有关
2017-04-28 12:36:13
330
原创 冒泡排序的链表实现
冒泡排序大家应该都很熟悉,不过平常都是用数组实现的,前几天参加了深信服的笔试,其中编程题第一个就是用链表实现冒泡排序,当时有点懵逼,所以我也不知道自己写的对不对,所以笔试后就认真看了一下这个。 用链表实现冒泡排序有两种方法:一种是交换节点,另一种就是只交换节点的值。
2017-04-04 19:28:30
949
转载 网络编程入门
Linux: 网络编程,一定离不开套接口;那什么是套接口呢?在Linux下,所有的I/O操作都是通过读写文件描述符而产生的,文件描述符是一个和打开的文件相关联的整数,这个文件并不只包括真正存储在磁盘上的文件,还包括一个网络连接、一个命名管道、一个终端等,而套接口就是系统进程和文件描述符通信的一种方法。
2016-11-08 22:05:49
346
转载 网络编程学习笔记一:Socket编程
“一切皆Socket!”话虽些许夸张,但是事实也是,现在的网络编程几乎都是用的socket。——有感于实际编程和开源项目研究。我们深谙信息交流的价值,那网络中进程之间如何通信,如我们每天打开浏览器浏览网页时,浏览器的进程怎么与web服务器通信的?当你用QQ聊天时,QQ进程怎么与服务器或你好友所在的QQ进程通信?这些都得靠socket?那什么是socket?socket的类型有哪些?
2016-11-06 21:38:24
379
原创 UVA12661
Problem : Funny Car RacingDescription : 有n个城市,m条边,问你从城市s到tt的总时间。每条路都有开放时间和关闭时间,还给出了你通过那条路的时间,你必须在那条路开放的时间内通过那条路,不然的话就只能等待那条再次开放然后通过,开关的计时是在从城市s出发开始的。Solution : 最短路径的变形,改一下松弛条件就可以了。
2016-08-26 21:33:21
771
原创 poj2135
Problem : Farm TourDescription : FJ想带他的朋友参观农场,他从家里出发,到达他在农场的休息点后返回,每一条路都有距离,他希望两次走的路程不一样,但是所走的总距离最小。Solution : 最小费用最大流问题。FJ从家里出发到达休息点后返回,可以转化为从家里到休息点有两条不同的路,路径不同,但所走的路程为最短。定义一个源点到家的流量为2,费用为0;再定义一个汇点,休息点到汇点的流量也为
2016-08-25 09:31:43
505
原创 poj1273
Problem : Drainage DitchesDescription : 有n个池塘,m条水渠,每条水渠的流量是固定的,给出这m条水渠所连接的池塘和所能流过的水量,求水渠中所能流过的水的最大容量.Solution : 最大流的入门题。需要注意的是会有重边出现,那么重边的流量会累加。
2016-08-24 17:17:52
325
原创 CSU1506
Problem : Double Shortest PathsDescription : Alice和Bob要从1走到n,每条边第一次被走过的时候的权值是cost,第二次被走过的时候是cost+re。Solution : 费用流裸题,对于将源点连到1,将n连到汇点,对于每条边建立两条边,一条费用为cost,另一条费用为cost+re,然后跑一遍最小费用最大流答案就出来了。
2016-08-24 16:13:36
364
原创 HDU4460
Problem:Friend ChainsDescription:有n个人,m个关系,A认识B经过最少的人数为A到B的关系长度,问在这n个人中,任意两个人相互认识的最长关系长度为多少。如果有两个人无法通过关系认识则输出-1。Solution:很明显的最短路问题。但是用floyd肯定超时,dijkstra算法这题也会超时。用spfa最后卡在了STL的队列上,换成手写的队列之后差不多卡着时间过了。
2016-08-19 16:04:57
1137
原创 HDU4452
Problem:Running RabbitsDescription:题目意思是说有两个兔子,一个起始位于(1,1)位置,另一个兔子起始位于(N,N)位置。给出兔子开始跳的时候的方向,速度(每小时s格),还有每隔t小时向左转一次方向。两只兔子相遇时会交换方向,问第k个时刻两只兔子分别的位置。Solution:模拟题。根据题目意思判断好方向的转化就好了。
2016-08-19 10:14:59
390
原创 poj 2531
Problem:Network SaboteurDescription:给出n个点,输入Cij表示从点i到点j的值为Cij.现要要把n个点分成两部分A集合,B集合,求A中的每个点到B中的每个点的总和值最大。Solution: 1、把这两个集合标记为0和1,先默认所有点都在集合0里。 2、依次枚举每个点id,把每个点都放到集合1里去,这个时候就要调整
2016-08-18 11:18:38
405
原创 poj1797
Problem: Heavy TransportationDescription :给出N个城市M条边,每条边都有个容量,求一条运输路线,使得从城市1到城市N的运输量最大。运输量取决于这条路线上运输量最少的那条路。Solution :用dijskstra算法对松弛条件变形即可。
2016-08-18 10:27:36
353
原创 poj1511
Problem: Invitation CardsDescription: 在一个城市里,有n(1~1000000)个运输中心,有m条有向路连接着任意的两个运输中心。ACM组织(位于编号为1的运输中心)要派发p个雇佣员工早上前往这p个运输中心去发传单,晚上再让他们都回到组织中。问所有人所走路程的总和最短是多少?Solution: 这是个最短路的问题,先一次用SPFA求早上从顶点1到各点的最短路径,再
2016-08-08 13:45:25
666
空空如也
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人