- 博客(192)
- 资源 (7)
- 收藏
- 关注
原创 根据前序遍历和中序遍历结果重建二叉树(递归方法)
假设已经有了前序遍历和中序遍历的结果,如何重建这棵树呢?给定函数定义如下:void Rebuild(char* pPreOrder, //前序遍历结果 char* pInOrder, //中序遍历结果 int nTreeLen, //树的长度 NODE** pRoot) //返回NODE**类型
2016-10-24 22:08:58
1648
1
转载 【分治法】最接近点对问题
问题场景:在应用中,常用诸如点、圆等简单的几何对象代表现实世界中的实体。在涉及这些几何对象的问题中,常需要了解其邻域中其他几何对象的信息。例如,在空中交通控制问题中,若将飞机作为空间中移动的一个点来看待,则具有最大碰撞危险的2架飞机,就是这个空间中最接近的一对点。这类问题是计算几何学中研究的基本问题之一。 问题描述:给定平面上n个点,找其中的一对点,使得在n个点的所有点对中,该点
2016-10-22 19:21:29
3375
1
原创 扔鸡蛋问题详解(Egg Dropping Puzzle)
经典的动态规划问题,题设是这样的:如果你有2颗鸡蛋,和一栋36层高的楼,现在你想知道在哪一层楼之下,鸡蛋不会被摔碎,应该如何用最少的测试次数对于任何答案楼层都能够使问题得到解决。如果你从某一层楼扔下鸡蛋,它没有碎,则这个鸡蛋你可以继续用如果这个鸡蛋摔碎了,则你可以用来测试的鸡蛋减少一个所有鸡蛋的质量相同(都会在同一楼层以上摔碎)对于一个鸡蛋,如果其在楼层i扔下的时候摔碎了,对于任何
2016-10-04 17:55:46
1623
原创 java如何实现进程间的通信?
先看看传统的进程间通信的手段:(1) 管道(PIPE)(2) 命名管道(FIFO)(3) 信号灯(Semphore)(4) 消息队列(MessageQueue)(5) 共享内存(SharedMemory)(6) Socket(当然也有Socket)如果加上上面提到的临时文件(临时文件其实是很难处理的,不同的进程间单靠临时文件可以交互信息,但是做到进程的调度控制确是很费力
2016-09-09 17:10:33
15184
原创 基于单链表的快排实现
快排最核心的思想就是划分,确定一个枢轴元素(pivot),每一趟划分的目的就是把待排序列分为两部分,前一部分比枢轴小(序列A),后一部分比枢轴大(序列B)。经过一趟划分之后序列变为:{A} pivot {B}。以下是具体步骤:1、确定每一次划分的枢轴元素为当前待排序列的头节点。2、设置Slow和Fast两个游标,Slow指向序列A中的最后一个元素,初始化为枢轴本身(待排序列头节点)。让Fa
2016-09-03 20:30:55
1473
转载 Redis的持久化方式
Redis的持久化Redis有两种持久化的方式:快照(RDB文件)和追加式文件(AOF文件):RDB持久化方式会在一个特定的间隔保存那个时间点的一个数据快照。AOF持久化方式则会记录每一个服务器收到的写操作。在服务启动时,这些记录的操作会逐条执行从而重建出原来的数据。写操作命令记录的格式跟Redis协议一致,以追加的方式进行保存。Redis的持久化是可以禁用的,就是说你可以让数据的
2016-08-29 15:19:55
671
转载 Spring Assert(方法入参检测工具类-断言)
Web 应用在接受表单提交的数据后都需要对其进行合法性检查,如果表单数据不合法,请求将被驳回。类似的,当我们在编写类的方法时,也常常需要对方法入参进行合 法性检查,如果入参不符合要求,方法将通过抛出异常的方式拒绝后续处理。举一个例子:有一个根据文件名获取输入流的方法:InputStream getData(String file),为了使方法能够成功执行,必须保证 file 入参不能为 null
2016-08-28 20:11:14
1448
转载 理解 Linux 的硬链接与软链接
Linux 的文件与目录现代操作系统为解决信息能独立于进程之外被长期存储引入了文件,文件作为进程创建信息的逻辑单元可被多个进程并发使用。在 UNIX 系统中,操作系统为磁盘上的文本与图像、鼠标与键盘等输入设备及网络交互等 I/O 操作设计了一组通用 API,使他们被处理时均可统一使用字节流方式。换言之,UNIX 系统中除进程之外的一切皆是文件,而 Linux 保持了这一特性。为了便于文件的
2016-08-28 11:22:33
680
原创 网易笔试题--混合颜色(异或)
你就是一个画家!你现在想绘制一幅画,但是你现在没有足够颜色的颜料。为了让问题简单,我们用正整数表示不同颜色的颜料。你知道这幅画需要的n种颜色的颜料,你现在可以去商店购买一些颜料,但是商店不能保证能供应所有颜色的颜料,所以你需要自己混合一些颜料。混合两种不一样的颜色A和颜色B颜料可以产生(A XOR B)这种颜色的颜料(新产生的颜料也可以用作继续混合产生新的颜色,XOR表示异或操作)。本着勤俭节
2016-08-20 23:23:17
2696
原创 网易笔试题--幸运袋子(数列各项和大于数列各项乘积)
一个袋子里面有n个球,每个球上面都有一个号码(拥有相同号码的球是无区别的)。如果一个袋子是幸运的当且仅当所有球的号码的和大于所有球的号码的积。例如:如果袋子里面的球的号码是{1, 1, 2, 3},这个袋子就是幸运的,因为1 + 1 + 2 + 3 > 1 * 1 * 2 * 3你可以适当从袋子里移除一些球(可以移除0个,但是别移除完),要使移除后的袋子是幸运的。现在让你编程计算一下你可以
2016-08-20 22:23:13
2339
2
原创 google笔试题 -- 根据已知数列得到不能组合求和的最小数
开始是Google笔试题 https://code.google.com/codejam/contest/4244486/dashboard#s=a&a=2 (翻墙看)网易笔试也出现了,如下:小易邀请你玩一个数字游戏,小易给你一系列的整数。你们俩使用这些整数玩游戏。每次小易会任意说一个数字出来,然后你需要从这一系列数字中选取一部分出来让它们的和等于小易所说的数字。 例如: 如果{2,1,2
2016-08-18 21:31:11
1110
转载 [Leetcode] Maximal Square 最大正方形
题目:Given a 2D binary matrix filled with 0's and 1's, find the largest square containing all 1's and return its area.For example, given the following matrix:1 0 1 0 01 0 1 1 11 1 1 1 1
2016-08-18 16:00:14
1089
转载 LeetCode OJ 之 Maximal Rectangle (最大的矩形)
题目:Given a 2D binary matrix filled with 0's and 1's, find the largest rectangle containing all ones and return its area.给一个二维的二进制矩阵,只包含0和1,找出只包含1的最大矩形并且返回这个矩形的面积。思路:本题通过下图变换可以转换为求 :Lee
2016-08-18 15:34:25
2153
1
转载 Largest Rectangle in Histogram(在柱形图中画出最大矩形)
Given n non-negative integers representing the histogram's bar height where the width of each bar is 1, find the area of largest rectangle in the histogram.Above is a histogram where width
2016-08-18 11:20:26
745
转载 凸包问题
首先介绍下什么是凸包问题?如下图:在一个二维坐标系,有若干点杂乱排列着,将最外层的点连接起来构成的凸多边型,它能包含给定的所有的点,这个多边形就是凸包。寻找凸包的算法有很多种,Graham Scan算法是一种十分简单高效的二维凸包算法,能够在O(nlogn)的时间内找到凸包。在讲解之前,读者需要了解向量叉积正负的几何意义,如不了解,可以参考htt
2016-08-15 21:49:10
3268
转载 判断线段相交
在讲解之前,先认识下“向量叉积”的概念:如图,对于给定的向量AB与向量AC,我们如何判断AB是在AC顺时针方向还是逆时针方向呢?(如图所示,AB在AC逆时针方向,同时,AC在AB的顺时针方向)假设向量AB坐标为(x1,y1),向量AC坐标为(x2,y2),则规定“向量叉积”为:x1 * y2 - y1 * x2 “向量叉积”的意义是:
2016-08-15 21:24:39
772
转载 字符串匹配的Boyer-Moore算法
介绍了KMP算法。但是,它并不是效率最高的算法,实际采用并不多。各种文本编辑器的"查找"功能(Ctrl+F),大多采用Boyer-Moore算法。Boyer-Moore算法不仅效率高,而且构思巧妙,容易理解。1977年,德克萨斯大学的Robert S. Boyer教授和J Strother Moore教授发明了这种算法。下面,我根据Moore教授自己的例子来解释这种
2016-08-15 21:13:20
387
转载 Sunday算法详解
一:背景Sunday算法是Daniel M.Sunday于1990年提出的字符串模式匹配。其效率在匹配随机的字符串时比其他匹配算法还要更快。Sunday算法的实现可比KMP,BM的实现容易太多。二:分析假设我们有如下字符串:A = "LESSONS TEARNED IN SOFTWARE TE";B = "SOFTWARE";Sund
2016-08-15 20:39:45
1075
转载 TCP之拥塞处理详解
什么是拥塞控制 网络拥塞现象是指到达通信网络中某一部分的分组数量过多,使得该部分网络来不及处理,以致引起这部分乃至整个网络性能下降的现象,严重时甚至会导致网络通信业务陷入停顿,即出现死锁现象。拥塞控制是处理网络拥塞现象的一种机制。 拥塞控制是一种用来调整传输控制协议(TCP)连接上单次发送的分组数量的算法,通过增减单次发送量逐步调整,使之逼近当前网络的承载量。如果单次发送
2016-08-15 09:55:54
5536
转载 JDK里的设计模式(全)
下面是JDK中有关23个经典设计模式的示例,在stakeoverflow也有相应的讨论:http://stackoverflow.com/questions/1673841/examples-of-gof-design-patternsStructural(结构模式)Adapter:把一个接口或是类变成另外一种。java.util.Arrays#asList() jav
2016-08-14 13:07:28
762
原创 整数划分总结(动态规划)
先引入一个比较实际的问题:分苹果题目M个相同苹果放到N个相同篮子里有多少种放法,允许有篮子不放。1<=M<=10,1<=N<=10例如5个苹果三个篮子,3,1,1 和 1,1,3是同一种放法输入 7 3输出 8思路设f(m,n) 为m个苹果,n个盘子的放法数目:当n>m:必定有n-m个盘子永远空着,去掉它们对摆放苹果方法数目不产生
2016-08-13 11:23:52
4979
转载 和尚挑水(回溯法)
复习回溯法题目某寺庙里7个和尚:轮流挑水,为了和其他任务不能冲突,各人将有空天数列出如下表:和尚1: 星期二,四;和尚2: 星期一,六;和尚3: 星期三,日;和尚4: 星期五;和尚5: 星期一,四,六;和尚6: 星期二,五;和尚7: 星期三,六,日;请将所有合理的挑水时间安排表 思路 回朔法求解回朔法即每进行一步,都试图在当前部分解的基础上扩大
2016-08-13 10:01:19
979
原创 根据入栈顺序判断出栈序列正确与否
题目描述: 题目标题:铁路栈问题铁路的调度站如下:火车编号为:1~9,且不重复。如:编号分别为“1”、“2”、“3”、“4”、“5”的5个火车顺序进站,那么进站序列为“12345”,全部进站后再顺序出站,则出站序列为“54321”,如果先进1,2,然后2出站,然后1出站,然后再3进站、出站,4进站、出站,5进站、出站,那么出站序列就为21345.详细
2016-08-12 15:51:10
2307
转载 回溯法求迷宫问题
并不是什么新鲜算法,只是这儿当作回溯法经典案例复习下而已!以一个M×N的长方阵表示迷宫,0和1分别表示迷宫中的通路和障碍。设计一个程序,对任意设定的迷宫,求出一条从入口到出口的通路,或得出没有通路的结论。(1) 根据二维数组,输出迷宫的图形。(2) 探索迷宫的四个方向:RIGHT为向右,DOWN向下,LEFT向左,UP向上,输出从入口到出口的行走路径。[测试数据
2016-08-12 10:52:37
1186
转载 回溯法求解N皇后问题
回溯法:也称为试探法,它并不考虑问题规模的大小,而是从问题的最明显的最小规模开始逐步求解出可能的答案,并以此慢慢地扩大问题规模,迭代地逼近最终问题的解。这种迭代类似于穷举并且是试探性的,因为当
2016-08-12 10:13:15
935
转载 矩阵连乘-动态规划-(只是感觉描述的清晰易懂,并不是什么新算法)
矩阵连乘-动态规划-详解DEC 19TH, 2015 11:04 AM动态规划法以矩阵链ABCD为例按照矩阵链长度递增计算最优值矩阵链长度为1时,分别计算出矩阵链A、B、C、D的最优值矩阵链长度为2时,分别计算出矩阵链AB、BC、CD的最优值矩阵链长度为3时,分别计算出矩阵链ABC、BCD的最优值矩阵链长度为4时,计算出矩阵链ABCD的最优值
2016-08-11 15:20:05
2308
原创 程序语言类型总结
编译型语言:编译是指在应用源程序执行之前,就将程序源代码“翻译”成目标代码(机器语言),因此其目标程序可以脱离其语言环境独立执行,使用比较方便、效率较高。但应用程序一旦需要修改,必须先修改源代码,再重新编译生成新的目标文件(* .OBJ)才能执行,只有目标文件而没有源代码,修改很不方便。现在大多数的编程语言都是编译型的。编译程序将源程序翻译成目标程序后保存在另一个文件中,该目标程序可脱离编译程
2016-08-07 10:53:39
404
原创 贪心算法,递归算法,动态规划算法比较与总结
一般实际生活中我们遇到的算法分为四类: 一>判定性问题 二>最优化问题 三>构造性问题 四>计算性问题而今天所要总结的算法就是着重解决 最优化问题 《算法之道》对三种算法进行了归纳总结,如下表所示: 标准分治动态规划贪心算法
2016-08-05 15:09:12
721
原创 Permutations 全排列生成算法
1、使用递归生成算法/* * 递归输出序列的全排列 */void permutation(char* array, size_t array_size, unsigned int index){ if(index >= array_size) { for(unsigned int i = 0; i < array_size; ++i) { cout << array[
2016-08-04 19:10:36
1053
转载 Java finally语句到底是在return之前还是之后执行?
网上有很多人探讨Java中异常捕获机制try...catch...finally块中的finally语句是不是一定会被执行?很多人都说不是,当然他们的回答是正确的,经过我试验,至少有两种情况下finally语句是不会被执行的:(1)try语句没有被执行到,如在try语句之前就返回了,这样finally语句就不会执行,这也说明了finally语句被执行的必要而非充分条件是:相应的try语句一
2016-08-01 09:43:22
470
1
转载 三种线性排序算法 计数排序、桶排序与基数排序
[非基于比较的排序]在计算机科学中,排序是一门基础的算法技术,许多算法都要以此作为基础,不同的排序算法有着不同的时间开销和空间开销。排序算法有非常多种,如我们最常用的快速排序和堆排序等算法,这些算法需要对序列中的数据进行比较,因为被称为基于比较的排序。基于比较的排序算法是不能突破O(NlogN)的。简单证明如下:N个数有N!个可能的排列情况,也就是说基于比较的排序算法的判定
2016-07-31 22:37:02
363
原创 内部类访问局部变量的时候,为什么变量必须加上final修饰
这里的局部变量就是在类方法中的变量,能访问方法中变量的类当然也是局部内部类了。我们都知道,局部变量在所处的函数执行完之后就释放了,但是内部类对象如果还有引用指向的话它是还存在的。例如下面的代码:class Outer{ public
2016-07-31 09:20:42
703
原创 ClassNotFoundException和NoClassDefFoundError的区别
正如它们的名字所说明的:NoClassDefFoundError是一个错误(Error),而ClassNOtFoundException是一个异常,在Java中错误和异常是有区别的,我们可以从异常中恢复程序但却不应该尝试从错误中恢复程序。ClassNotFoundException的产生原因:Java支持使用Class.forName方法来动态地加载类,任意一个类的类名如果被作为参数传递给这个方法都
2016-07-29 10:35:22
418
原创 Java并发编程:Callable、Future和FutureTask
一般常见的创建线程的2种方式,一种是直接继承Thread,另外一种就是实现Runnable接口。 这2种方式都有一个缺陷就是:在执行完任务之后无法获取执行结果。 如果需要获取执行结果,就必须通过共享变量或者使用线程通信的方式来达到效果,这样使用起来就比较麻烦。 而自从Java 1.5开始,就提供了Callable和Future,通过它们可以在任务执行完毕之后得到任务执
2016-07-25 22:51:58
437
原创 数据库进阶之数据库事务(ACID)
事务(Transaction)是并发控制的基本单位。 所谓事务,它是一个操作序列,这些操作要么都执行,要么都不执行,它是一个不可分割的工作单位。例如,银行转帐工作:从一个帐号扣款并使另一个帐号增款,这两个操作要么都执行,要么都不执行。数据库事务必须具备ACID特性,ACID是Atomic(原子性)、Consistency(一致性)、Isolation(隔离性)和Durability(持久性)的英
2016-07-25 10:57:01
267
转载 数据库进阶之数据库索引
一、引言对数据库索引的关注从未淡出我的们的讨论,那么数据库索引是什么样的?聚集索引与非聚集索引有什么不同?希望本文对各位同仁有一定的帮助。有不少存疑的地方,诚心希望各位不吝赐教指正,共同进步。[最近首页之争沸沸扬扬,也不知道这个放在这合适么,苦劳?功劳?……] 二、B-Tree我们常见的数据库系统,其索引使用的数据结构多是B-Tree或者B+Tree。例如,MsSql使用的是
2016-07-25 10:49:33
213
转载 数据库进阶之数据库范式
数据库范式(Normal forms):是用于规范关系型数据库设计,以减少谬误发生的一种准则。 1NF(first normal form):Table faithfully represents a relation and has no repeating groups.数据库表必须如实地展现“关系”,并且不允许有“重复组”出现。 这样的概念真是令人痛心疾首,我们只好再
2016-07-25 10:48:24
438
转载 java虚拟机内存分配之新生代与老年代GC
堆设置 -Xms :初始堆大小 -Xmx :最大堆大小 -XX:NewSize=n :设置年轻代大小 -XX:NewRatio=n: 设置年轻代和年老代的比值。如:为3,表示年轻代与年老代比值为1:3,年轻代占整个年轻代年老代和的1/4 -XX:SurvivorRatio=n :年轻代中Eden区与两个Survivor区的比值。注意Survivor区有两个。如:3,表示Eden:Survivor=3:2,一个Survivor区占整个年轻代的1/5 -XX:MaxPermSize=n :设置持久代大小 收集器
2016-07-15 16:22:34
4938
原创 Java虚拟机之对象探秘
Java虚拟机之对象探秘对象的创建虚拟机遇到一条new指令时,首先会检查指令参数是否能够在常量池中定位到一个类的符号引用,并且检查这个符号引用代表的类是否已经被加载、解析和初始化过。如果没有,那么必须先执行相应的类加载过程。类加载过程通过后,接下来就是虚拟机将为新生对象分配内存。对象所需内存的大小在类加载完成后便可确定,即在Java堆中分配一块确定大小的内存。- 如果Java堆内存是绝对规整的,
2016-07-14 16:53:53
401
原创 JVM的GC日志分析
JVM的GC日志的主要参数包括如下几个:-XX:+PrintGC 输出GC日志-XX:+PrintGCDetails 输出GC的详细日志-XX:+PrintGCTimeStamps 输出GC的时间戳(以基准时间的形式)-XX:+PrintGCDateStamps 输出GC的时间戳(以日期的形式,如 2013-05-04T21:53:59.234+0800)-
2016-07-14 15:56:56
452
高质量C++。doc
2018-11-27
DWR入门教程.pdf
2014-09-30
prototype1.7.js
2014-08-20
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人