- 博客(41)
- 收藏
- 关注
原创 JavaScript实现插入排序、冒泡排序
1.插入排序算法分析见:https://blog.csdn.net/charlene0824/article/details/51387165 function insertSort(arr) { var len=arr.length; for(var i=0;i<len;i++){ var temp...
2018-03-27 21:08:13
202
原创 JavaScript实现杨辉三角
杨辉三角:每一行首尾两个数字都是1、中间的数字等于上一行相邻两个数字的和、即: C(m,n) = C(m-1,n-1)+C(m-1,n)js实现: var row=8; //先声明一维 var array=new Array(row); for(var i=0;i<row;i++){ //再声明二维 ...
2018-03-27 19:21:37
3569
原创 基于区块链的数字版权保护介绍
一、数字版权定义: 各类出版物、信息资料的网络出版权,可以通过新兴的数字媒体传播内容的权利。包括制作和发行各类电子书、电子杂志、手机出版物等的版权。 各国家对于数字版权作品的定义不一。以中国为例,主要数字版权作品包括以电子图书、数字报纸、数字期刊、网络原创文学、网络教育出版物为主的文字型作品,以及数字音乐、数字影视、网络动漫、网络游戏、手机出版物(彩信、彩铃、手机报纸、手机期刊、手机小...
2018-03-19 21:06:36
11301
转载 星际文件系统IPFS简介
转自:http://www.8btc.com/ipfs-blockchain星际文件系统IPFS(InterPlanetary File System)是一个面向全球的、点对点的分布式版本文件系统,目标是为了补充(甚至是取代)目前统治互联网的超文本传输协议(HTTP),将所有具有相同文件系统的计算设备连接在一起。原理用基于内容的地址替代基于域名的地址,也就是用户寻找的不是某个地址而是储存在某个地方...
2018-03-19 20:19:18
2314
转载 《软件定义网络核心原理与应用实践》——Mininet系统架构
Mininet系统架构 Mininet是可以在电脑上快速建立大规模SDN原型系统的网络仿真工具,可以模拟真实网络,由终端节点(End-Host)、OpenFlow交换机、控制器组成。1.namespace机制 Mininet是基于Linux Container这一内核虚拟化技术开发的进程虚拟化平台,主要用到namespace机制。在不同namespace的进程看到的系统资源可能不同,默...
2018-03-19 20:16:09
2352
转载 深入浅出QOS
QOS,服务质量。顾名思义,就是为了给现有的网络提供一个更好的性能,让各种网络应用更加顺畅的运作。 1. 对各种网络应用做到了精确的控制使用资源,就是对他们进行区别对待了,这也就是QOS中分类的概念。 2.修理数据传输路径上的小瑕疵,以求让数据传输的更流畅,这也就是流量调节。 3.出现资源紧张的局面,可以采取措施来搞定,这里也就拥塞管理和拥塞避免。 一、QOS的类别...
2018-03-19 20:12:21
318
转载 2017下一代数据中心网络研究报告
下一代数据中心演进的四大驱动力1、业务竞争驱动:企业提升自身竞争力,对敏捷性、差异化和成本节约提出了新要求2、内容流量驱动:高速增长的视频和富媒体内容成为数据中心的新压力3、交付模式驱动:云计算和移动化成为主流交付模式4、工作负载驱动:大数据分析和物联网日益重要,未来将成为数字化转型的关键手段。下一代数据中心对网络的关键需求1、简单化、标准化和模块化 Simplification, Standar...
2018-03-19 20:10:19
825
原创 面试题27:二叉搜索数与双向链表
1.题目:输入一棵二叉搜索树,将该二叉搜索树转换成一个排序的双向链表。要求不能创建任何新的结点,只能调整树中结点指针的指向。2.思路: 由于要求转换之后的链表是排好序的,我们可以中序遍历树中的每一个结点,这是因为中序遍历算法的特点是按照从小到大的顺序遍历二叉树的每一个结点。 最后,按照中序遍历的顺序,当我们遍历转换到根结点(值为10的结点)时,它的左子树已经转换成一个排序的链表了,并且...
2018-03-19 19:22:40
225
原创 面试题26:复杂链表的复制
题目:输入一个复杂链表(每个节点中有节点值,以及两个指针,一个指向下一个节点,另一个特殊指针指向任意一个节点),返回结果为复制后复杂链表的head。思想:java实现public static RandomListNode clone(RandomListNode pHead) { //复制节点并插入到原节点之后 if(pHead==null) return null; RandomL...
2018-03-16 18:40:39
99
原创 归并排序
1.基本思想将两个或两个以上的有序表合成一个新的有序表。先将N个数据看做N个长度为1的表,将相邻的表成对合并,得到长度为2的N/2个有序表,进一步讲相邻的合并,得到长度为4的N/4个有序表,以此类推,知道所有数据均合并成为一个长度为N的有序表。2.java实现递归实现 public void mergeArray(int a[],int first,int mid,int last,int tem...
2018-03-16 15:21:45
148
转载 选择排序——堆排序
预备知识堆排序 堆排序是利用堆这种数据结构而设计的一种排序算法,堆排序是一种选择排序,它的最坏,最好,平均时间复杂度均为O(nlogn),它也是不稳定排序。首先简单了解下堆结构。堆 堆是具有以下性质的完全二叉树:每个结点的值都大于或等于其左右孩子结点的值,称为大顶堆;或者每个结点的值都小于或等于其左右孩子结点的值,称为小顶堆。如下图:同时,我们对堆中的结点按层进行编号,将这种逻辑结构映射到数组...
2018-03-15 16:12:01
852
原创 选择排序——直接选择排序
选择排序:每一趟从待排序的记录里选取关键字最小的记录,顺序放在已经排好序的子文件最后,直到全部记录排序完毕,一、直接选择排序1.基本思想:第一次从R[0]~R[n-1]中选取最小值,与R[0]交换,第二次从R[1]~R[n-1]中选取最小值,与R[1]交换,....,第i次从R[i-1]~R[n-1]中选取最小值,与R[i-1]交换,.....,第n-1次从R[n-2]~R[n-1]中选取最小值,...
2018-03-15 14:57:01
727
原创 交换排序——快速排序
1.基本思想:采用分治的思想。快速排序通过选择一个元素,该元素称为枢轴元素或切分元素,然后将它放到一个合适的位置上,使得它前面的元素不大于它,它后面的元素不小于它,然后将枢轴元素为分界点,两边的数组也采取类似的方法,即选取枢轴元素,使得前面的元素不大于它,后面的不小于它,重复进行下去,直到数组里面只有一个元素(递归退出条件)。一趟快速排序的算法是:1)设置两个变量i、j,排序开始的时候:i=0,j...
2018-03-13 19:12:00
145
原创 交换排序——冒泡排序
1.基本思想:设想被排序的记录关键字保存在数组R[1...n]中,将每个记录R[i]看做是重量为R[i].key的气泡。根据轻气泡不能再重气泡之下的原则,从右往左扫描数组R;凡扫描到违反本原则的轻气泡,就使其向上漂浮,每次冒出剩余最小的气泡。如此反复,直到最后任何两个气泡都是轻者在上,重者在下为止。2.java实现public void bubbleSort(int []a) { int le...
2018-03-13 16:16:00
127
原创 不用比较运算符判断数的大小
题目:给定两个数a和b, 如何不用比较运算符, 返回较大的数思路:解法1:用位运算来替代条件运算符;令a-b=c,通过位运算判断c的符号scA,正为1,负为0,scB为scA取反;则较大的数为a*scA+b*scB解法2:在1的基础上考虑溢出的问题,只有符号不同相减时可能产生溢出;因此判断a较大的情况为 a b符号不同,a为正数或者a b符号相同 a-b=c c的符号为正。java实现:publi...
2018-03-06 12:45:45
3239
原创 面试题22:栈的压入弹出序列
题目:输入两个整数序列,第一个序列表示栈的压入顺序,请判断第二个序列是否为该栈的弹出顺序。假设压入栈的所有数字均不相等。例如序列1,2,3,4,5是某栈的压入顺序,序列4,5,3,2,1是该压栈序列对应的一个弹出序列,但4,3,5,1,2就不可能是该压栈序列的弹出序列。(注意:这两个序列的长度是相等的)思路:建立一个辅助栈,把输入的第一个序列的数字一次压入该辅助栈,并按照第二个序列的顺序依次从该栈...
2018-03-05 11:28:57
201
原创 面试题21:包含min函数的栈
题目:定义栈的数据结构,请在该类型中实现一个能够得到栈最小元素的min函数。在该栈中,调用min、push及pop的时间复杂度都是O(1)。思路:定义一个辅助栈,原有的存储数据的栈按正常进出栈;数据进栈的时候,和辅助栈栈顶元素比较,小于等于栈顶元素则辅助栈,辅助栈为空时直接压入;出栈时,将数据栈要出栈的元素和辅助栈栈顶元素比较,相等则辅助栈出栈。 这样,辅助栈栈顶一直是数据栈中的最小元素。jav...
2018-03-05 10:21:51
149
原创 面试题19:二叉树的镜像
题目:完成一个函数,输入一个二叉树,该二叉树输出他的镜像。思路:从根节点开始前序遍历二叉树,如果遍历到的节点有子节点,则交换他的左右子节点,一直到交换完所有非叶子节点的左右子节点。java实现:递归public void mirrorRecursively(BinaryTreeNode root) { if(root==null) return; if(root.left==null...
2018-03-01 10:30:31
189
原创 面试题18:树的子结构
题目:输入两颗二叉树A和B,判断B是不是A的子结构。思路:1.在树A中找到和B根节点的值一样的节点R。采用递归方法去遍历树public static boolean hasSubTree(BinaryTreeNode root1,BinaryTreeNode root2) { boolean result=false; if(root1!=null&&root2!=null...
2018-02-28 16:23:29
109
原创 面试题17:合并两个排序的链表
题目:输入两个单调递增的链表,输出两个链表合成后的链表,当然我们需要合成后的链表满足单调不减规则。思路:从两个链表头结点开始比较,叫小的那个作为合并链表的头结点;继续对链表剩余的头结点进行比较,小的加入到已经合并的链表之后。合并的步骤是重复的,可以用递归求解。java实现:public static ListNode mergeSortedList(ListNode head1,ListNode ...
2018-02-27 16:38:51
129
原创 面试题16:反转链表
题目:定义一个函数,输入一个链表的头结点,反转该链表并输出反转后链表的头结点。思想:从头开始调整链表的指向,将当前节点指向下一个节点的指针,改为指向前一个节点。从头结点开始,头结点的前一个节点为null。java实现:(非递归)public static ListNode reverseList(ListNode head) { if(head==null) return null; Li...
2018-02-27 15:34:14
127
原创 折纸问题
题目:给一个很长很窄的纸条,把纸条竖着放在桌子上,然后从纸条的下边向上方对折1次,压出折痕后展开,此时折痕是凹下去的,也就是突起的方向指向纸条的下方; 如果从纸条的下边向上方对折2次,压出折痕后展开,此时有三条折痕,从上到下依次是:下折痕、下折痕、上折痕; 如果纸条每次都从下边向上方对折,在对折n次之后展开。此时所有折痕突起的方向是什么样的呢? 请写一个函数,输入一个整数代表纸条的对折次数记为fT...
2018-02-26 17:57:38
213
原创 面试题15:链表中倒数第k个结点
题目:输入一个链表,输出该链表中倒数第K个结点。为了符合大多数人的习惯,本题从1开始计数,即链表的尾结点是倒数第1个结点。例如一个链表有6个结点,从头结点开始它们的值依次是1、2、3、4、5、6。这个链表的倒数第3个结点是值为4的结点。思想:保持大小为K的滑动窗口,当窗口滑到链表最末尾时,窗口第一个数就是倒数第k个数。注意代码鲁棒性:链表为空,k<=0,还有链表长度小于k都会出错。java实...
2018-02-26 15:09:12
120
原创 面试题14:调整数组顺序使奇数位于偶数前面
题目:输入一个整数数组,实现一个函数来调整该数组中数字的顺序,使得所有的奇数位于数组的前半部分,所有的偶数位于位于数组的后半部分,并保证奇数和奇数,偶数和偶数之间的相对位置不变。思路:维护两个指针,第一个指针初始指向数组第一个数字,只向后移动;第二个之后初始指向最后一个数字,只向前移动。在两个指针相遇前,第一个指针向后移动找到偶数,第二个指针向前移动找到奇数,两者交换,继续移动。java实现:pu...
2018-02-26 14:38:10
102
转载 面试题13:在O(1)时间内删除链表结点
题目:给定单向链表的头指针和一个节点指针,定义一个函数在O(1)时间删除该节点。思路:要删除的节点i,先把i的下一个节点j的内容复制到i,然后把i的指针指向节点j的下一个节点。此时再删除节点j,其效果刚好是把节点i给删除了。上述问题还有一个问题;如果要删除的节点位于链表的尾部,那么它就没有下一个节点,怎么办?我们让然从链表的头节点开始,顺序遍历得到该节点的前序节点,并完成删除操作。最后需要注意的是...
2018-02-25 17:18:46
200
原创 面试题12:打印1到最大的n位数
题目:输入数字n,按顺序打印从1到最大的n位十进制数。这是一个大数问题,n较大时会产生溢出,需要用字符串来表示数字。方法1:将n位的字符串中每一个数字初始化为‘0’,然后每次为字符串表示的数字加一,再打印。需要两步,一在字符串表达的数字上模拟加法,二将字符串表达的数字打印出来。什么时候停止+1?当+1时最高位产生进位,表示此时已经是最大n位数。java实现:public void print1To...
2018-02-25 16:50:35
119
原创 插入排序——希尔排序
希尔排序算法思想:希尔排序是把记录按下标的一定增量分组,对每组使用直接插入排序算法排序;随着增量逐渐减少,每组包含的关键词越来越多,当增量减至1时,整个文件恰被分成一组,算法便终止。本质是分组插入排序,每次将较小的元素插入到前面,较大的元素留在后面。排序过程如下:以26、53、67、48、57、13、48、32、60、50为例,1、第一趟排序以n/2即10/2=5为间隔26、53、67、48、57...
2018-01-16 21:50:18
247
原创 插入排序——直接插入排序
一、直接插入排序直接插入排序的基本思想是:将一个记录插入到已排好序的有序表中,从而得到一个新的有序表。设数组为a[0…n-1]。1. 初始时,a[0]自成1个有序区,无序区为a[1..n-1]。令i=12. 将a[i]并入当前的有序区a[0…i-1]中形成a[0…i]的有序区间。3. i++并重复第二步直到i==n-1。排序完成。java实现
2018-01-16 20:32:56
180
原创 将字母转换为列号
题目:在Excel2003中,用A表示第1列,B表示第2列......Z表示第26列,AA表示第27列,AB表示第28列......以此类推。请写出一个函数,输入用字母表示的列号编码,输出它是第几列。思路:A-Z看作26进制数,就是把26进制数转换为十进制。java实现:public static int litterToListNumber(String str) {
2017-12-27 16:49:55
323
原创 面试题9:斐波那契数列
题目:现在要求输入一个整数n,请你输出斐波那契数列的第n项。求解:1.递归求解public static long fibonacci(int n) { if(n==0) return 0; if(n==1) return 1; return fibonacci(n-1)+fibonacci(n-2); } 递归效率较差,很多计算时重复的。
2017-12-27 14:32:01
113
原创 面试题8:旋转数组的最小数字
题目:把一个最开始的若干元素搬到数组的末尾,我们称为数组的旋转。输入一个递增排序数组的一个旋转,输出旋转数组的最小元素。例如数组{3,4,5,1,2}是{1,2,3,4,5}的一个旋转,该数组的最小值为1。思路:采用二分查找,两个指针index、indexe2分别指向数组的第一个元素和最后一个元素; (1) 如果数组已经有序时array[index1] (2)数组
2017-12-26 22:28:28
100
原创 面试题7:用两个栈实现队列
题目:用两个栈实现一个队列。队列声明如下,请实现它的两个函数appendTail和deleteHead,分别完成在队列尾部插入结点和在队列头部删除结点的功能。解题思想:假设有栈stack1和stack2,依次插入元素a、b、c,只需直接插入到stack1中; 要删除队列头部时,需要将a、b、c先弹出并依次存入stack2,再弹出stack2的尾结点
2017-12-20 22:29:36
145
原创 查找——二叉排序树
用线性表作为表的组织形式时,用二分查找效率最高。但二分查找只能用于顺序存储结构,不能用链式存储结构,不适用于插入删除操作频繁的情况,只适合静态查找表。对动态查找表进行高效率查找,最好用二叉排序树。1.基本概念二叉排序树(Binary Sort Tree):为空或满足以下条件: (1)每个结点左子树上所有结点的关键字,值都小于该结点的关键字; (2)每个结点右子树上所有结
2017-12-14 15:39:09
518
转载 查找--线性表
查找基本概念:(1)动态查找和静态查找表 若在查找的同时对表做修改操作(如插入和删除),则相应的表称之为动态查找表。否则为静态查找表。(2)内查找和外查找 若整个查找过程都在内存进行,则称之为内查找;反之,若查找过程中需要访问外存,则称之为外查找。1.顺序查找从头到尾扫描比较。优点算法简单,对表的结构没有要求;缺点是查找效率低。java实现:
2017-11-30 12:05:34
267
原创 二叉树的层次遍历
进行层次遍历时,对一层结点访问完后,再按照它们的访问次序对各个结点的左孩子右孩子顺序访问,这样就完成了对下一层从左往右访问。具体步骤如下:(1)初始化一个队列;(2)将根节点放入队列;(3)重复步骤4~7直到队列为空;(4)从队列中取出一个结点x;(5)访问x;(6)如果x存在左孩子,将左孩子放入队列;(7)如果x存在右孩子,将右孩子放入队列;public vo
2017-11-22 21:31:05
293
原创 面试题6:重建二叉树
题目:根据某二叉树的前序遍历和中序遍历结果,重建该二叉树思路:前序遍历的第一个数字就是根节点,在中序遍历中找到根节点,根节点左边是左子树节点,根节点右边是右子树节点;这样递归构建 public BinaryTreeNode constructCore(int[] pre,int[] in) { if(pre==null||in==null||pre.length!=in.length)
2017-11-22 20:37:56
152
原创 二叉树
二叉树(binary tree)每个节点都不能有对于两个的儿子。二叉树平均深度为;对于二叉查找树,其深度平均值是;1.实现二叉树节点最多有两个子节点,所以可以保存直接链接到它们的链(树的话子节点个数不确定,保存所有到子节点的直接链接不可行)。二叉树节点类,元素(element)信息加上两个到其他节点的引用(left和right):class BinaryNode{
2017-11-13 12:19:03
228
原创 树的基础知识
对于任意节点i,i的深度为根到该节点i的唯一路径的长,根的深度为0,树的深度等于最深的树叶的深度;i的高度为节点i到一片树叶的最长路径的长,所有树叶的高度为0,一棵树的高等于根的高;树的深度=树的高。1.树的实现
2017-11-13 11:17:18
157
原创 面试题5:从头到尾打印链表
题目:输入一个链表的头结点,从尾到头反过来打印出每个结点的值。思路1:遍历一遍链表,将结点存入栈中,最后弹出栈中元素。public void reverseListNode(ListNode listNode) { Stack stack=new Stack(); if(listNode==null) return; while(listNode!=nu
2017-11-07 21:16:54
149
原创 [LeetCode]Add Digits
Given a non-negative integer num, repeatedly add all its digits until the result has only one digit.For example:Given num = 38, the process is like: 3 + 8 = 11, 1 + 1 = 2. Since 2 has on
2017-04-19 11:01:09
191
空空如也
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人