- 博客(68)
- 收藏
- 关注
原创 将字符串中的空格替换成“%20”
请实现一个函数,将一个字符串中的空格替换成“%20”。例如,当字符串为We Are Happy.则经过替换之后的字符串为We%20Are%20Happy。1.计算空格数量 2.给出替换之后的字符串长度 3.从后向前修改str
2017-08-07 16:44:42
564
原创 在一个二维数组中,每一行都按照从左到右递增的顺序排序,每一列都按照从上到下递增的顺序排序。请完成一个函数,输入这样的一个二维数组和一个整数,判断数组中是否含有该整数。
在一个二维数组中,每一行都按照从左到右递增的顺序排序,每一列都按照从上到下递增的顺序排序。请完成一个函数,输入这样的一个二维数组和一个整数,判断数组中是否含有该整数。由于数组是向右向下递增的,因此,我们选取左下角为基准值val。 若是target大于val,则列++ 若是target小于val,则行--
2017-08-07 16:15:56
1710
原创 将N个字符的数组,循环右移K位。时间复杂度O(N)
1.逆序排列 abcd: abcd1234 -> dcba1234;2.逆序排列 1234: dcba1234-> dcba4321;3.全部逆序 dcba4321->1234abcd。
2017-08-06 10:58:21
1446
原创 时间复杂度为O(n)的排序
对数组a进行排序,要求时间复杂度为O(N) 以空间换时间,新建一个数组b,这里假设arr中最大的数字不超过100,b数组全部初始化为0;例如arr中有数据12,则在b中对应的下标位置+1
2017-08-06 09:48:13
1561
1
原创 STL空间配置器
为什么要有空间配置器? 1.内存碎片问题(外碎片) 由于频繁分配、释放小块内存容易在堆中造成外碎片(极端情况下就是堆中空闲的内存总量满足一个请求,但是这些空闲的块都不连续,导致任何一个单独的空闲的块都无法满足这个请求)。2.频繁的分配小块内存,效率比较低。 开辟空间的时候,分配器去找一块空闲块给用户。找空闲块也是需要时间的,尤其是在外碎片比较多的情况下。
2017-08-02 12:54:34
553
原创 netstat
netstat是在内核中访问网络相关信息的程序,它能够提供TCP连接、TCP和UDP监听、进程内存管理的状态。netstat也是一种控制台命令,是一个监控TCP/IP网络的非常有用的工具,他可以显示路由表、实际网络连接以及每一个网络接口设备的状态信息。使用netstat可以让用户知道有哪些网络连接正在运作,使用时如果不带参数,netstat显示活动的TCP连接。
2017-07-31 12:51:51
296
原创 Linux下 crond和crontab
crond,一般情况下,系统都会默认启动次调度服务,crond会每分钟检查需要定时执行的操作。 crond是一个命令,常见于Unix和类Unix的操作系统中,用于设置周期性被执行的指令。该命令从标准输入设备读取指令,并将其存放区“crontab”文件中,以供之后读取和执行。 crond正是crontab的守护进程。crontab,顾名思义,定时任务列表,通过crontab来配置定时任务。
2017-07-31 11:06:00
323
原创 链表面试题:判断两个链表是否相交
判断两个链表是否相交,若相交,求交点。(假设链表不带环)判断两个链表是否相交,若相交,求交点。(假设链表可能带环)
2017-07-30 20:29:26
350
原创 TCP协议
TCP(Transmission Control Protocol 传输控制协议)是一种面向连接的、可靠的、基于字节流的传输层通信协议。
2017-07-30 14:10:42
311
原创 将二叉搜索树转换成一个排序的双向链表
搜索树每一棵子树的左节点都比根节点小,每一个右节点都比根节点大。 根据其特性,我们可以通过中序遍历线索化的相关变形,来改变指针指向,实现变形。
2017-07-30 14:07:03
389
原创 求二叉树中两个节点的最近公共祖先
要求考虑以下三种种情况,给出解决方案,并解决: 1:二叉树每个节点有parent(三叉链) 2:二叉树是搜索二叉树。 3:就是普通二叉树。(尽可能实现时间复杂度为O(N))
2017-07-28 22:21:24
786
原创 判断一棵树是否是完全二叉树
这道题可以看作是层序遍历的变形。在二叉树的层序遍历中,我们借助一个数据结构队列,根据其先进先出的性质,实现层序遍历。可以定义一个flag标志位,一旦遇到空节点,标志位生效。
2017-07-28 15:29:28
394
原创 判断一棵树是否是平衡二叉树及其时间复杂度的优化
平衡二叉树:它是一棵空树或者左右子树的高度差绝对值不超过1,并且左右两棵子树都是平衡二叉树。要判断一棵树是否是平衡二叉树,由其定义我们很容易想到通过计算出左右两棵子树的高度及其高度差来进行判断。
2017-07-26 15:46:36
2691
1
原创 链表翻转。给出一个链表和一个数k,比如链表1→2→3→4→5→6,k=2,翻转后2→1→4→3→6→5,若k=3,翻转后3→2→1→6→5→4,若k=4,翻转后4→3→2→1→5→6
给出一个链表和一个数k,比如链表1→2→3→4→5→6,k=2,翻转后2→1→4→3→6→5,若k=3,翻转后3→2→1→6→5→4,若k=4,翻转后4→3→2→1→5→6
2017-07-25 17:12:46
1061
原创 二叉树的非递归遍历
二叉树递归遍历的时候,将其分为根、左子树、右子树三个部分。其非递归遍历,也是分为三个部分,通过数据结构“栈”的入栈出栈操作以及其先入后出的特性,实现其遍历
2017-07-23 12:54:30
446
原创 二叉树
二叉树的特点1.每个节点最多有两棵子树,即二叉树中不存在度大于2的节点(分支数最大不超过2) 2.二叉树的子树有左右之分,也就是说二叉树是有序的。二叉树相关概念节
2017-07-23 10:55:43
341
原创 TCP定时器
TCP使用四种定时器(Timer,也称为“计时器”): 重传计时器:Retransmission Timer 坚持计时器:Persistent Timer 保活计时器:Keeplive Timer 时间等待计时器:Time_Wait Timer。重传计时器 当TCP发送报文段时,就创建该特定报文段的重传计时器。 若在计时器截止时间到(通常60秒)之前收到了对此特定报文段的确认,则撤销
2017-07-17 10:51:45
330
原创 TCP层URG、PSH标识
在TCP层,有个FLAGS字段,这个字段有以下几个标识:SYN, FIN, ACK, PSH, RST, URG.其中,对于我们日常的分析有用的就是前面的五个字段。它们的含义是:SYN表示建立连接,FIN表示关闭连接,ACK表示响应,PSH表示有 DATA数据传输,RST表示连接重置,URG表示为紧急报文。接下来我们分别对比URG和PSH(1)URG紧急位URG=1,该tcp报文为紧急报文;其中的紧
2017-07-17 09:55:49
410
原创 端口分类
“端口“是英文port的意译,可以认为是设备与外界通讯交流的出口。端口可分为虚拟端口和物理端口,其中虚拟端口指计算机内部或交换机路由器内的端口,不可见。例如计算机中的80端口、21端口、23端口等。物理端口又称为接口,是可见端口,计算机背板的RJ45网口,交换机路由器集线器等RJ45端口。电话使用RJ11插口也属于物理端口的范畴。通俗地讲,端口(Port)就是电脑向网络开放的信息出入“门户”。和小区
2017-07-17 09:44:18
1807
转载 如何定义一个只能在堆上(栈上)生成对象的类?
在C++中,类的对象建立分为两种,一种是静态建立,如A a;另一种是动态建立,如A* ptr=new A;这两种方式是有区别的。静态建立一个类对象,是由编译器为对象在栈空间中分配内存,是通过直接移动栈顶指针,挪出适当的空间,然后在这片内存空间上调用构造函数形成一个栈对象。使用这种方法,直接调用类的构造
2017-07-15 22:42:04
213
原创 路由生产算法
路由器使用路由算法来找到到达目的地的最佳路由。当说“最佳路由”时,考虑的参数包括诸如跳跃数(分组数据包在网络中从一个路由器或中间节点到另外的节点的行程)、延时以及分组数据包传输通信耗时。路由:数据包从源地址到目的地址所需要经过的路径,由一系列节点组成。路由某个路由节点为数据报选择投递方向的选路过程。 路由节点:一个具有路由功能的主机或者路由器,维护一张路由表,通过查询路由表来决定向哪个节点发送数据包
2017-07-15 10:54:04
316
原创 归并排序
基本思想: 它将要排序的序列分成两个长度相等的子序列,为每一个子序列进行排序,然后再将子序列合并成一个有序的序列。合并两个子序列的过程称为两路归并。
2017-07-13 13:38:41
252
原创 ARP协议
什么是ARP? ARP (Address Resolution Protocol) 是个地址解析协议。 也就是说,在IP以太网中,当一个上层协议要发包时,有了该节点的IP地址,ARP就能提供该节点的MAC地址。 在网络通讯时,源主机的应用程序知道目的主机的IP地址和端口号,却不知道目的主机的硬件地址,而数据包首先是被网卡接收到再去处理上层协议的,如果接收到的数据包的硬件地址与本机不符,则直
2017-07-12 15:46:05
481
原创 NAT技术与代理服务器
NAT技术在计算机网络中,网络地址转换(Network Address Translation,缩写为NAT),也叫做网络掩蔽或者IP掩蔽(IP masquerading),是一种在IP数据包通过路由器或防火墙时重写来源IP地址或目的IP地址的技术。这种技术被普遍使用在有多台主机但只通过一个公有IP地址访问因特网的私有网络中。根据规范,路由器是不能这样工作的,但它的确是一个方便并得到了广泛应用的技术
2017-07-12 09:34:02
496
原创 交换排序——快速排序
void QuickSort(int *arr, int begin, int end){ assert(arr); int div = PartSort1(arr, begin, end); if (div - 1>begin) PartSort1(arr, begin, div - 1); if (div + 1<end)
2017-07-11 18:38:32
451
空空如也
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人