自定义博客皮肤VIP专享

*博客头图:

格式为PNG、JPG,宽度*高度大于1920*100像素,不超过2MB,主视觉建议放在右侧,请参照线上博客头图

请上传大于1920*100像素的图片!

博客底图:

图片格式为PNG、JPG,不超过1MB,可上下左右平铺至整个背景

栏目图:

图片格式为PNG、JPG,图片宽度*高度为300*38像素,不超过0.5MB

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+

兰亭风雨的专栏

欢迎关注我的原创公众号:兰亭风雨(lantingfy)--倚栏听风雨,淡看江湖路,淡泊以明志,宁静以致远。

  • 博客(239)
  • 资源 (14)
  • 论坛 (2)

原创 Android Touch事件传递机制全面解析(从WMS到View树)

转眼间近一年没更新博客了,工作一忙起来,很难有时间来写博客了,由于现在也在从事Android开发相关的工作,因此以后的博文也会更多地专注于这一块。 这篇文章准备从源码层面为大家带来Touch事件的传递机制,我这里分析的源码时Android4.4的。说到分析源码,光看肯定是不行的,一定要亲自去跟,并且要边跟边思考,所以在下一篇中,会有一个Demo来为大家详细分析源码的走向。

2015-12-21 07:43:35 12117 21

原创 2014年终总结:这一年所经历的和正在发生的事情

无声无息间,又到了岁末!这一年是我的本命年,本以为会霉运连连,却没有想到又峰回路转,这一年来所遭遇的失落让我明白了很多道理,而这一年所取得的收获则更加让我坚定了一些信念。 写博客是这一年来一直在坚持的事情。印象中,是2013年的4月份在CSDN上写的第一篇博文,但当时的文章基本都是从新浪博客上搬过来的,而且文章质量并不高,因此访问量很低,发了20多篇文章,一条评论都没有。后来,写了篇“详细讲解二叉树三种遍历方式的递归与非递归实现”的文章,因为讲解比较详细,发出去不到1小时便收到了一些评论,而且被小编

2015-01-05 00:03:07 12947 44

原创 2015互联网校招总结—一路走来

结束了在百度的实习,是时候写下校招的总结了,再不写估计很多东西都忘了。在开源社区混迹久了,从别人的学习、求职、工作经历中越发感受到很多的正能量,也本着攒RP的原则,向学弟学妹们,尤其非名校的学弟学妹们传递点正能量,因为博主也是非名校出身,而且在整个求职的过程中能够很明显地感受到名校学生那种得天独厚的优势,同样的实力,名校学生进入BAT等一线互联网企业确实要容易很多,即便技术很水,一样有华为等企业保底,而非名校的可能连简历筛选这关都过不了。博主说这些,并不是为了打击非名校的学生,只是,这些确实是事实,既然无法

2014-10-29 00:03:45 59976 232

原创 【Java集合源码剖析】LinkedHashmap源码剖析

前言:有网友建议分析下LinkedHashMap的源码,于是花了一晚上时间研究了下,分享出此文,希望大家相互学习。LinkedHashMap的源码理解起来也不难(当然,要建立在你对HashMap源码有较好理解的基础上)。 LinkedHashMap简介 LinkedHashMap是HashMap的子类,与HashMap有着同样的存储结构,但它加入了一个双向链表的头结点,将所有put到LinkedHashmap的节点一一串成了一个双向循环链表,因此它保留了节点插入的顺序,可以使节点的输出顺序

2014-07-17 07:37:18 30916 17

原创 【Java集合源码剖析】TreeMap源码剖析

前言 本文不打算延续前几篇的风格(对所有的源码加入注释),因为要理解透TreeMap的所有源码,对博主来说,确实需要耗费大量的时间和经历,目前看来不大可能有这么多时间的投入,故这里意在通过于阅读源码对TreeMap有个宏观上的把握,并就其中一些方法的实现做比较深入的分析。红黑树简介 TreeMap是基于红黑树实现的,这里只对红黑树做个简单的介绍,红黑树是一种特殊的二叉排序树,关于二叉排序树,参见:http://blog.csdn.net/ns_code/article/details/

2014-07-07 07:47:49 13120 9

原创 【Java集合源码剖析】Hashtable源码剖析

Hashtable简介 Hashtable同样是基于哈希表实现的,同样每个元素是一个key-value对,其内部也是通过单链表解决冲突问题,容量不足(超过了阀值)时,同样会自动增长。 Hashtable也是JDK1.0引入的类,是线程安全的,能用于多线程环境中。 Hashtable同样实现了Serializable接口,它支持序列化,实现了Cloneable接口,能被克隆。

2014-07-06 00:53:22 19536 8

原创 【Java集合源码剖析】HashMap源码剖析

HashMap简介 HashMap是基于哈希表实现的,每一个元素是一个key-value对,其内部通过单链表解决冲突问题,容量不足(超过了阀值)时,同样会自动增长。 HashMap是非线程安全的,只是用于单线程环境下,多线程环境下可以采用concurrent并发包下的concurrentHashMap。 HashMap 实现了Serializable接口,因此它支持序列化,实现了Cloneable接口,能被克隆。

2014-07-04 00:16:23 35867 33

原创 【Java集合源码剖析】Vector源码剖析

Vector简介 Vector也是基于数组实现的,是一个动态数组,其容量能自动增长。 LinkedList是JDK1.0引入了,它的很多实现方法都加入了同步语句,因此是线程安全的(其实也只是相对安全,有些时候还是要加入同步语句来保证线程的安全),可以用于多线程环境。 LinkedList没有丝线Serializable接口,因此它不支持序列化,实现了Cloneable接口,能被克隆,实现了RandomAccess接口,支持快速随机访问。Vector源码剖析 Vector的

2014-07-02 00:03:14 11089 10

原创 【Java集合源码剖析】LinkedList源码剖析

LinkedList简介 LinkedList是基于双向循环链表(从源码中可以很容易看出)实现的,除了可以当做链表来操作外,它还可以当做栈、队列来使用。 LinkedList同样是非线程安全的,只在单线程下适合使用。 LinkedList实现了Serializable接口,因此它支持序列化,能够通过序列化传输,实现了Cloneable接口,能被克隆。LinkedList源码剖析 LinkedList的源码如下(加入了比较详细的注释):

2014-07-01 08:29:58 17020 23

原创 【Java集合源码剖析】ArrayList源码剖析

ArrayList是基于数组实现的,是一个动态数组,其容量能自动增长,类似于C语言中的动态申请内存,动态增长内存。 ArrayList不是线程安全的,只能用在单线程环境下,多线程环境下可以考虑用Collections.synchronizedList(List l)函数返回一个线程安全的ArrayList类,也可以使用concurrent并发包下的CopyOnWriteArrayList类。 ArrayList实现了Serializable接口,因此它支持序列化,能够通过序列化传输,实现了R

2014-06-30 08:02:49 24365 23

原创 【Java集合源码剖析】Java集合框架

Java集合工具包位于Java.util包下,包含了很多常用的数据结构,如数组、链表、栈、队列、集合、哈希表等。学习Java集合框架下大致可以分为如下五个部分:List列表、Set集合、Map映射、迭代器(Iterator、Enumeration)、工具类(Arrays、Collections)。 从上图中可以看出,集合类主要分为两大类:Collection和Map。 Collection是List、Set等集合高度抽象出来的接口,它包含了这些集合的基本操作,它主要又分为两大部分:List和

2014-06-29 12:48:55 24430 16

原创 【算法拾遗】二分查找递归非递归实现

本篇博文没太多要说的,二分查找很简单,也是常见常考的查找算法,一下是递归非递归的实现。 非递归实现:

2014-06-24 12:45:59 4241 2

原创 【网络协议】TCP的拥塞控制机制

前言计算机网络中的带宽、交换节点中的缓存和处理机等,都是网络的资源,在某段时间内,若对网络中某一资源的需求超过了该资源所能提供的可用部分,网络的性能就要变坏,这种情况就叫做拥塞。所谓拥塞控制,就是防止过多的数据注入到网络中,从而使网络中的路由器或链路不致过载。要注意用拥塞控制与流量控制的区别,拥塞控制是一个全局性的过程,涉及到所有的额主机、路由器,以及与降低网拥塞控制的算法有:慢开始、拥塞避免、快重传、快恢复四种。 慢开始和拥塞避免发送方维持一个拥塞窗口的状态变量,其大小取决于网络的拥塞程度

2014-06-21 00:54:02 13497 1

原创 【网络协议】TCP中的四大定时器

前言 对于每个TCP连接,TCP一般要管理4个不同的定时器:重传定时器、坚持定时器、保活定时器、2MSL定时器。 重传定时器 很明显重传定时器是用来计算TCP报文段的超时重传时间的(至于超时重传时间的确定,这里涉及到一大堆的算法,书上有说,我这里不细谈了)。每发送一个报文段就会启动重传定时器,如果在定时器时间到后还没收到对该报文段的确认,就重传该报文段,并将重传定时器复位,重新计算;如果在规定时间内收到了对该报文段的确认,则撤销该报文段的重传定时器。 坚持定时器

2014-06-20 08:30:05 6808

原创 【网络协议】TCP的流量控制机制

一般来说,我们总是希望数据传输的更快一些,但如果发送方把数据发送的很快,而接收方来不及接收,这就可能造成数据的丢失。流量控制就是让发送方的发送速率不要太快,让接收方来得及接收。 对于成块数据流,TCP利用滑动窗口机制来实现流量的控制,对于交互数据流,TCP利用捎带ACK和Nagle算法来实现流量的控制。 后两种就不说了,上篇博文中将已经写得比较清楚了,对于滑动窗口机制,上篇博文中也又说到,只是没有刻意提到用滑动窗口来实现流量的控制。下面就详细说下利用滑动窗口机制来实现流量控制的机制,先看下图

2014-06-20 08:29:34 8348

原创 【网络协议】TCP的交互数据流和成块数据流

前言 建立在TCP协议上的应用层协议有很多,如FTP、HTTP、Telnet等,这些协议根据传输数据的多少可以分为两类:交互数据类型和成块数据类型。 交互数据类型,如:Telnet,这类协议一般只做小流量的数据交换,比如每按下一个键,要回显一些字符。 成块数据类型,如:FTP,这类协议需要传输的数据比较多,一般传输的数据量比较大。 针对这两种不同的情况,TCP采用不同的策略进行数据传输。 交互数据流 针对交互性要求比较高的应用,比如Rlogin远程登录中,需

2014-06-20 08:29:27 6169 3

原创 【网络协议】TCP协议简介

本文只是对TCP协议做个简要的介绍。 TCP协议,即传输控制协议,与UDP协议同处于传输层,同样使用相同的网络层,但TCP提供了一种可靠的、面向连接的数据传输服务,它会在两个使用TCP的应用之间建立一个TCP连接,在该连接上进行数据的传输。 TCP通过以下方式提供可靠性: 1、应用程序被分割成TCP认为最合适发送的数据块。这点与UDP完全不同,应用程序产生的UDP数据报长度将保持不变,加上IP首部后,才会进行IP分片。 2、当TCP发出一个报文段后,它会启动一个定时器,等待目

2014-06-18 08:29:50 4877

原创 看世界杯应该看到一种精神

看世界杯应该看到一种精神,一种锲而不舍、四年磨一剑的精神。 平时很少看足球,但这两届世界杯,阿根廷的比赛是必看的,因为有梅西。 梅西带给我的更多的是一种精神上的感动。 现在已经不习惯在QQ空间发表说说了,四年前的一条说说:

2014-06-16 13:20:45 3359 5

原创 【网络协议】UDP协议

UDP是一个简单的面向数据报的运输层协议:进程的每个输出操作都会产生一个UDP数据报,并组装成一份待发送的IP数据报,这与面向字符流的协议不同,如TCP,应用程序产生的全体数据与真正发送的单个IP数据报可能没有什么联系(主要是在传输层就进行分段了,因此不会受IP分片的影响)。 UDP的首部一共8个字节,很简单,可以参考书上,这里也不再详说。 UDP的校验和 至于UDP的校验和,这里注意下区别就好了,UDP对首部和数据部分都进行校验,而IP首部的校验和仅对IP的首部进行校验,顺带提下T

2014-06-13 00:00:19 5144 8

原创 【网络协议】TCP分段与IP分片

我们在学习TCP/IP协议时都知道,TCP报文段如果很长的话,会在发送时发生分段,在接受时进行重组,同样IP数据报在长度超过一定值时也会发生分片,在接收端再将分片重组。 我们先来看两个与TCP报文段分段和IP数据报分片密切相关的概念。 MYU(最大传输单元) MTU前面已经说过了,是链路层中的网络对数据帧的一个限制,依然以以太网为例,MTU为1500个字节。一个IP数据报在以太网中 传输,如果它的长度大于该MTU值,就要进行分片传输,使得每片数据报的长度小于MTU。分片传输的IP数据

2014-06-12 08:20:45 25563 10

原创 【网络协议】ICMP协议、Ping、Traceroute

ICMP协议 ICMP经常被认为是IP层的一个组成部分,它是网络层的一个协议,它传递差错报文以及其他需要注意的信息,ICMP报文通常被IP层或更高层(TCP、UDP等)使用,它是在IP数据报内传输的。 ICMP报文大致分为两类:查询报文和差错报文。 先来看差错报文。当传送IP数据报发生错误时(比如主机不可达、网络不可达等),ICMP协议将会发送一个ICMP差错报文给源主机,好让主机做出相应的处理,也因此IP层以上的一些协议有可能做到可靠传输。书中给出了ICMP差错报文中的一些组合(类

2014-06-12 08:20:34 9102

原创 【网络协议】IP协议、ARP协议、RARP协议

前20字节和紧接其后的选项部分是IP数据报的首部,前20个字节是固定的,选项可有可无。首部的每一行是一个32位字的单位,最高位在左边,为0bit,最低位在右边,为31bit。4字节的32bit值按照以下次序传输:首先0-7bit,其次8-15比特,然后16-23bit,最后是24-31bit,这种传输次序称为big endian字节序(我们在C语言写位操作的算法时常用到该词)。TCP/IP首部中的所有二进制整数在网络中传输时都要求以这种次序,因此它又称作网络字节序,其他形式存储的二进制数据,如little

2014-06-11 00:04:02 7150 1

原创 【网络协议】数据链路层

数据链路层主要有三个目的:为IP模块发送和接受IP数据报;为ARP模块发送ARP请求和接受ARP应答;为RARP发送RARP请求和RARP应答。 这里的ARP协议主要用来将32bit的IP地址解析为对应48bit(以太网中)的MAC地址(硬件地址)。而RARP协议则是将硬件地址解析为IP地址,这两个协议位于网络层,和IP数据报一样,都具有各自的以太网数据帧类型(即传入到以太网中要加上对应的MAC帧)。局域网中的ARP攻击是通过伪造IP地址和MAC地址实现ARP欺骗,能够在网络中产生大量的AR

2014-06-11 00:03:57 4143

原创 【网络协议】TCP连接的建立和释放

TCP报文段首部的前20个字节是固定的,后面有4N字节是根据需要而增加的选项。因此TCP报文段的最小长度为20个字节。 首部固定部分的各字段的意义如下: 1、源端口和目的端口:加上IP首部的源IP地址和目的IP地址,确定唯一的一个TCP连接。另外通过目的端口来决定TCP将数据报交付于那个应用程序,从而实现TCP的分用功能。 2、序号:占4个字节,序号的范围为[0,4284967296]。由于TCP是面向字节流的,在一个TCP连接中传送的字节流中的每一个字节都按顺序编号,首部中的序号字

2014-06-09 08:16:50 21089 5

原创 【算法拾遗】子数组的最大乘积

给定一个长度为N的整数数组,只允许使用乘法,不能使用除法,计算任意N-1个数的组合乘积的最大值。 这道题目重点要注意数组中有负数、0的情况。最直观的做法就是把所有可能的N-1个数的组合找出来,分别计算他们的乘积,并比较大小。找出所有组合需要O(N)时间,计算每个组合的乘积需要O(N)时间,因此该算法的时间复杂度为O(N*N)。 编程之美上给出了两种O(N)的解法。 第一种比较直观,假设去掉第i个元素后的剩下的N-1个元素的成绩为p[i],则从左向右扫描数组,计算第0到第i-1个元素

2014-06-08 08:33:03 5247

原创 【算法拾遗】最大数和最小数

求一个数组中的最大值和最小值,我们一般的做法是扫描一遍数组求的最大值,扫描一遍数组求最小值,这样做需要比较2N次才能求解。而实际上我们可以比较1.5N次即可得到结果。考虑如下几种方法。 方法一: 我们可以把数组分成两部分,首先按照顺序将数组中的相邻的两个数分在同一组,接着比较同一组中奇数位上的值和偶数位上的值,将较大的放在偶数位上,较小的放在奇数位上,这样经过0.5N次比较后,最大数肯定在偶数位上,最小的数肯定在奇数位上,而后分别扫描一遍数组的偶数位和奇数位,便可得到最大值和最小值。这样,

2014-06-06 00:07:29 3999

原创 【算法拾遗】最大公约数

求两个正整数的最大公约数是一个很古老且很基本的问题,欧几里得在其著作《几何原本》中给出了高效的解法——辗转相除法,也叫做欧几里得算法。下面我们来看下求最大公约数的一些方法。方法一 我们先来看欧几里得的辗转相除法。原理很简单,假设用f(x,y)表示x和y的最大公约数,我们令x>y,则有x=ky+b,如果一个数能够同时整除x和y,则必能同时整除b和y,而能够同时整除b和y的数也必能同时整除x和y,即x和y的公约数与b和y的公约数相同,因此二者的最大公约数也相同,则有f(x,y)=f(y,x%y),一

2014-06-05 00:44:58 3111 3

原创 【算法拾遗】阶乘

前言 主要看两道题,我们通过这两道题目引伸出一些结论。题目一:N!末尾0的个数 找末尾0出现的个数,那我们就要找产生0的乘数,即哪些数相乘会得到10。我们需要对N!进行质因数分解,由于10 = 2*5,因此0的个数至于N!中2和5出现的的对数有关,而能被2整除的数出现的频率比能被5整除的数要多得多,因此我们找出N!中质因数5出现的个数,即为N!末尾0的个数。

2014-06-04 00:48:44 2459

原创 五月份小结

转眼间进入六月份了,校招也越来越近了,虽然心里还是没底,但是学习的动力却依然很足。虽然现在一切都不确定,但我始终坚信,付出总会有所回报的!生活上 五月份虽然依然有些不顺心的事,但相比四月份,算是好多了。整个四月份发生了太多不顺心的事,其中对我打击最大的莫过于外公的突然离世,为此我整整一周没怎么学习,一想到外公的样子,想到小时候他经常带着我玩,眼泪就控制不住,一个人跑到楼顶大哭,哭完后洗把脸,回实验室。再后来,一次次地告诫自己,不能总是停留在悲伤中,要尽快调整过来,无论发生什么,生活总还要继续,

2014-06-04 00:02:34 6083 34

原创 【剑指offer】把数组排成最小的数

题目描述:输入一个正整数数组,把数组里所有数字拼接起来排成一个数,打印能拼接出的所有数字中最小的一个。例如输入数组{3,32,321},则打印出这三个数字能排成的最小数字为321323。输入:输入可能包含多个测试样例。对于每个测试案例,输入的第一行为一个整数m (1<=m <=100)代表输入的正整数的个数。输入的第二行包括m个正整数,其中每个正整数不超过10000000。输出:对应每个测试案例,输出m个数字能排成的最小数字。

2014-06-03 08:38:23 11790 4

原创 【剑指offer】最近公共祖先

这类的题目,方法蛮多的,思路也不难理解,基本都是各种遍历的变种,主要是写代码,尤其基于递归的代码。 首先如果是二叉排序树自然不用说了,判断的一句就是该节点的值是否位于输入的这两个节点之间,可以用前序遍历来做。 如果是普通的树或者二叉树,解题思路是一样的,可以考虑前序遍历,得到两个路径,用链表或数组保存起来,然后找出两条路径的最后一个公共节点即可。也可以后序遍历的方式,遍历到输入的节点时,将该节点及其后面遍历到的节点都保存到一个链表或数组中,然后找出两条路径的第一个公共机节点即可。

2014-06-03 08:36:26 7143 2

原创 【剑指offer】字符串转整数

关于这道题目,题目本身还是不错的,真正核心的代码也就那么两行,大部分代码基本都在做非法输入的检查。 最近做这几道题目,对九度后台的测试用例有点无语了,这道题目的测试用例应该有问题,我写的代码自己测试了很多种不同的非法输入以及合法输入,都没问题,但是在九度OJ上只有第四条测试用例通过,其他四条全部WA,害的我搞了一个晚上,后来下了个别人AC的代码,拿来测试了下,结果各种非法的输入都没处理,很多非法的输入,得到的都是些莫名奇妙的答案。 先贴上代码,大家帮我看下有木有没考虑到的地方:

2014-06-02 08:52:32 5740 2

原创 【剑指offer】不用加减乘除做加法

题目描述:写一个函数,求两个整数之和,要求在函数体内不得使用+、-、*、/四则运算符号。输入:输入可能包含多个测试样例。对于每个测试案例,输入为两个整数m和n(1<=m,n<=1000000)。输出:对应每个测试案例,输出m+n的值。

2014-06-02 08:52:24 7091 1

原创 【剑指offer】无聊的1+2+...+n

题目描述:求1+2+3+...+n,要求不能使用乘除法、for、while、if、else、switch、case等关键字及条件判断语句(A?B:C)。输入:输入可能包含多个测试样例。对于每个测试案例,输入为一个整数n(1<= n<=100000)。输出:对应每个测试案例,输出1+2+3+…+n的值。样例输入:

2014-06-02 08:50:44 5543 11

原创 【剑指offer】约瑟夫环问题

题目描述:每年六一儿童节,JOBDU都会准备一些小礼物去看望孤儿院的小朋友,今年亦是如此。HF作为JOBDU的资深元老,自然也准备了一些小游戏。其中,有个游戏是这样的:首先,让小朋友们围成一个大圈。然后,他随机指定一个数m,让编号为1的小朋友开始报数。每次喊到m的那个小朋友要出列唱首歌,然后可以在礼品箱中任意的挑选礼物,并且不再回到圈中,从他的下一个小朋友开始,继续1...m报数....这样下去....直到剩下最后一个小朋友,可以不用表演,并且拿到JOBDU名贵的“名侦探柯南”典藏版(名额有限哦!!^_^

2014-06-02 08:50:34 7916 3

原创 【剑指offer】扑克牌的顺子

九度上把这道题目改成了一副扑克牌有4张大小王,这里姑且不管它最多几个0,就题目来说,不严谨,很含糊,比如这里没有对顺子给出比较严谨的定义,5个以下的连续数字算是顺子吗?现实中要至少5个才算顺子的,而且如果假设3个牌也算顺子,那如果输入的是3个0呢,这有点太牵强了!看论坛里面好多人吐槽。总之,不管那么多,这道题目无论它怎么坑爹,用剑指offer上的思路写的代码AC是没问题的,因为这里不管你0有多少个(只要不大于数组的长度就可)都OK。 我之前想避开排序,或者开辟哈希数组,就遍历一遍求出最大值,最小值,

2014-06-01 00:00:52 4511

原创 【剑指offer】和为定值的连续正数序列

题目描述:小明很喜欢数学,有一天他在做数学作业时,要求计算出9~16的和,他马上就写出了正确答案是100。但是他并不满足于此,他在想究竟有多少种连续的正数序列的和为100(至少包括两个数)。没多久,他就得到另一组连续正数和为100的序列:18,19,20,21,22。现在把问题交给你,你能不能也很快的找出所有和为S的连续正数序列? Good Luck!输入:输入有多组数据。每组数据仅包括1个整数S(S<=1,000,000)。如果S为负数时,则结束输入。输出:对应每组数据,若不存在和为S的连续正

2014-06-01 00:00:36 3901

原创 【剑指offer】数组中只出现一次的数字(2)

题目:一个int数组中有三个数字a、b、c只出现一次,其他数字都出现了两次。请找出三个只出现一次的数字。 上篇博文中我们求的是两个只出现一次的数字,且时间复杂度为O(n),这次是三个,可以同样考虑将数组先分成两个子数组,求出其中一个只出现一次的数字,而后再将另一个子数组分成两个子数组,再分别求这两个只出现一次的数字。何海涛的博客给的就是这种思路,并给出了详细的证明过程,详见:http://zhedahht.blog.163.com/blog/static/2541117420128308424641

2014-05-31 13:13:53 4770 2

原创 【剑指offer】数组中只出现一次的数字(1)

思路:上篇博文中已经了解到异或去重的原理,而且知道如果只有一个只出现一次的数字的求法,但这里是有两个只出现一次的数字,我们便要想办法把他分为两个子数组,每个子数组中包含一个只出现一次的数字,其他的数字都出现了两次。剑指offer上的思路很巧妙,依然从头到尾异或所有的数字,这样得到的结果实际上就是两个只出现了一次的数字异或的结果,我们在异或后的结果中找出其二进制中最右边为1的位,该位既然为1,说明异或的两个数字对应的该位肯定不同,必定一个为1,一个为0,因此我们可以考虑根据此位是否为1来划分这两个子数组,这样

2014-05-31 08:59:12 8139 1

原创 【剑指offer】异或去重

或是一种基于二进制的位运算,用符号XOR或者 ^ 表示,其运算法则是对运算符两侧数的每一个二进制位,同值取0,异值取1。它与布尔运算的区别在于,当运算符两侧均为1时,布尔运算的结果为1,异或运算的结果为0。 异或的性质: 1、交换律:a^b = b^a; 2、结合律:(a^b)^c = a^(b^c); 3、对于任意的a:a^a=0,a^0=a,a^(-1)=~a。 了解了上面这些,来看看这个,很重要,后面的程序都要用到这个结论: 对于任意的a,有a^b^c^

2014-05-30 08:51:41 7517 4

字典树求公共前缀字符串数目

字典树求具有公共前缀的字符串数目, 对应的博客地址:http://blog.csdn.net/ns_code/article/details/21183495

2014-03-13

哈希表相关操作实现

哈希表相关操作实现。对应讲解的博客地址:http://blog.csdn.net/ns_code/article/details/20763801

2014-03-08

九大内部排序算法打包下载

源码包括:冒泡排序、选择排序、插入排序、希尔排序、堆排序、归并排序、快速排序、计数排序、基数排序等,没有实现桶排序。 每一种排序算法在我的博客中都有对应的讲解.

2014-03-05

优化冒泡排序和选择排序

冒泡排序和选择排序均用两种方法实现,原始方法和在原始方法上的改进和优化,对应博客地址:http://blog.csdn.net/ns_code/article/details/20065107

2014-02-27

插入排序和希尔排序的多种实现方法

插入排序采用三种方法实现,希尔排序根据插入排序采用的方法不同,也有三种,但是又通过改进得到一种最为简介的实现方式。所有方法的实现在博客中:http://blog.csdn.net/ns_code/article/details/20043459中有详细的讲述

2014-02-27

模式匹配—BF算法和KMP算法

模式匹配—从BF算法优化到KMP算法,含有详细注释,对应的讲述该算法的博文地址:http://blog.csdn.net/ns_code/article/details/19286279

2014-02-19

两种遍历方法实现赫夫曼编码

对之前的代码做了些改进,并增加了一种无栈非递归求赫夫曼编码的方法。加入了更详细的注释。。

2014-02-15

赫夫曼树的构建及赫夫曼编码(C语言源代码,代码中含详细注释)

C语言实现赫夫曼树的构建及赫夫曼编码的源代码,配合我的CSDN博客:http://blog.csdn.net/ns_code/article/details/19174553中的讲解,帮助你掌握Huffman编码的算法实现

2014-02-15

百度2014校园招聘笔试题

百度2014校园招聘深圳站移动软件研发岗笔试题

2013-10-05

深入浅出mfc

侯捷的深入浅出mfc 简体中文版,很清晰

2012-11-29

Matlab 实例程序百例

很多实用的程序,可以拿来现用,或者稍作修改来用。很好,很实用。。。。。

2010-06-01

大学生职业生涯规划书

本人作品,可以作为模板,曾获校级十佳规划之星,并吧被推选为省级参赛作品,但因时间关系,最终放弃省赛。。

2010-06-01

简易洗衣机设计—基于Multism

实现了实验要求的全部功能,并提供了详细的论文和仿真电路图

2010-05-22

2009年全国大学生数学建模竞赛A题论文

本论文只含有论文内容,不含该题目的数据,数据可以自行在官网上下载

2010-05-22

兰亭风雨的留言板

发表于 2020-01-02 最后回复 2020-02-22

Java TCP/IP Socket网络编程系列

发表于 2013-12-22 最后回复 2016-09-01

空空如也
提示
确定要删除当前文章?
取消 删除