- 博客(19)
- 资源 (17)
- 收藏
- 关注
原创 B树(B-树)、B+树、AVL树、B*树
看数据结构的时候经常容易被各种树绕晕,所以重新整理下这些 纠结树。1,B树(B-树)注意,好多地方都喜欢说B-树,给人一种错觉B-树与B树是两种数据结构,其实是一种。外文翻译的时候B-tree,有的人喜欢翻译成B-树,有的翻译为B树,所以才造成了这样的错觉。先看看B树的数据结构:这是从july算法的博客中拿过来的一个图定义为: 一颗m阶的B树
2016-03-23 20:33:30 1111
原创 常见内排序算法的java实现
先把结果放在前面,这样每次看到就能熟悉一次。排序大的分类可以分为两种:内排序和外排序。在排序过程中,全部记录存放在内存,则称为内排序,如果排序过程中需要使用外存,则称为外排序。下面讲的排序都是属于内排序。 内排序有可以分为以下几类: (1)、插入排序:直接插入排序、二分法插入排序、希尔排序。 (2)、选择排序:简单选择排序、堆排序。 (3)、交换
2016-03-10 11:35:16 759
原创 表示数值的字符串---JAVA版
题目描述请实现一个函数用来判断字符串是否表示数值(包括整数和小数)。例如,字符串"+100","5e2","-123","3.1416"和"-1E-16"都表示数值。 但是"12e","1a3.14","1.2.3","+-5"和"12e+4.3"都不是。分析: 这题条件有点多,从最后的测试用例可以知道 "600."这种形式是算true的具体的条件是:
2016-03-28 22:31:11 1050
原创 正则表达式匹配-剑指offer(JAVA版)
题目描述请实现一个函数用来匹配包括'.'和'*'的正则表达式。模式中的字符'.'表示任意一个字符,而'*'表示它前面的字符可以出现任意次(包含0次)。 在本题中,匹配是指字符串的所有字符匹配整个模式。例如,字符串"aaa"与模式"a.a"和"ab*ac*a"匹配,但是与"aa.a"和"ab*a"均不匹配 分析:递归实现每次分别在str 和pattern中取一个字
2016-03-28 21:15:04 3990 2
原创 二叉搜索树与双向链表(java版)
题目描述输入一棵二叉搜索树,将该二叉搜索树转换成一个排序的双向链表。要求不能创建任何新的结点,只能调整树中结点指针的指向。分析: 对于二叉搜索树,用中序搜索算法挺适合。考虑每个子树子节点作为三部分,这里以根结点为特殊例子进行阐述递归实现,每次用一个lastNode存放上一个子树的最后一个结点,该结点是上个已排好子树的最大的结点。
2016-03-27 22:18:48 2216 3
转载 TCP/IP协议三次握手与四次握手流程解析
一、TCP报文格式 TCP/IP协议的详细信息参看《TCP/IP协议详解》三卷本。下面是TCP报文格式图:图1 TCP报文格式 上图中有几个字段需要重点介绍下: (1)序号:Seq序号,占32位,用来标识从TCP源端向目的端发送的字节流,发起方发送数据时对此进行标记。 (2)确认序号:Ack序号,占32位,只有ACK标志位为1时,确认序号字段才有效,Ack=Seq+
2016-03-27 00:02:12 456
原创 链表中环的入口结点
题目描述一个链表中包含环,请找出该链表的环的入口结点。分析:此题说明了单链表中一定有环,且只有一个环,一般做法都是用快慢指针来进行跑,由于有环就不去判断是否有环慢指针速度为1,块指针速度为2,第一次相遇后停止,让慢指针回到头,再次都以速度1开始跑,再次相遇的地点即为链表的环的入口点。数学证明公式如下: 第一次相遇时: 慢
2016-03-26 13:26:00 431
原创 丑数(JAVA)
题目描述把只包含因子2、3和5的数称作丑数(Ugly Number)。例如6、8都是丑数,但14不是,因为它包含因子7。 习惯上我们把1当做是第一个丑数。求按从小到大的顺序的第N个丑数。分析:根据丑数的定义,丑数只能被2、3和5整除。也就是说如果一个数如果它能被2整除,我们把它连续除以2;如果能被3整除,就连续除以3;如果能被5整除,就除以连续5。如果最后我
2016-03-24 22:52:12 4014 1
原创 整数中1出现的次数(从1到n整数中1出现的次数)
题目描述求出1~13的整数中1出现的次数,并算出100~1300的整数中1出现的次数?为此他特别数了一下1~13中包含1的数字有1、10、11、12、13因此共出现6次,但是对于后面问题他就没辙了。ACMer希望你们帮帮他,并把问题更加普遍化,可以很快的求出任意非负整数区间中1出现的次数public class Solution { public int NumberOf1
2016-03-23 23:20:14 468
原创 字符串的排列组合
题目来自剑指offer题目描述输入一个字符串,按字典序打印出该字符串中字符的所有排列。例如输入字符串abc,则打印出由字符a,b,c所能排列出来的所有字符串abc,acb,bac,bca,cab和cba。 结果请按字母顺序输出。 输入描述:输入一个字符串,长度不超过9(可能有字符重复),字符只包括大小写字母。import java.util.ArrayList;
2016-03-23 21:40:41 1113
原创 网易2016软件工程师笔试题-----[编程题] 奖学金(JAVA实现)
小v今年有n门课,每门都有考试,为了拿到奖学金,小v必须让自己的平均成绩至少为avg。每门课由平时成绩和考试成绩组成,满分为r。现在他知道每门课的平时成绩为ai ,若想让这门课的考试成绩多拿一分的话,小v要花bi 的时间复习,不复习的话当然就是0分。同时我们显然可以发现复习得再多也不会拿到超过满分的分数。为了拿到奖学金,小v至少要花多少时间复习。输入描述:第一行三个整数n,r,
2016-03-22 16:11:26 2268
转载 从集合的resize看Java HashMap的死循环
问题的症状从前我们的Java代码因为一些原因使用了HashMap这个东西,但是当时的程序是单线程的,一切都没有问题。后来,我们的程序性能有问题,所以需要变成多线程的,于是,变成多线程后到了线上,发现程序经常占了100%的CPU,查看堆栈,你会发现程序都Hang在了HashMap.get()这个方法上了,重启程序后问题消失。但是过段时间又会来。而且,这个问题在测试环境里可能很难重现。
2016-03-17 17:09:31 2721
转载 从java多线程内存模型说到ConcurrentHashMap
ConcurrentHashMap是Java5中新增加的一个线程安全的Map集合,可以用来替代HashTable。对于ConcurrentHashMap是如何提高其效率的,可能大多人只是知道它使用了多个锁代替HashTable中的单个锁,也就是锁分离技术(Lock Stripping)。实际上,ConcurrentHashMap对提高并发方面的优化,还有一些其它的技巧在里面(比如你是否知道在get
2016-03-17 16:21:23 1523
原创 Vector源码分析
Vector简介 Vector也是基于数组实现的,是一个动态数组,其容量能自动增长。 Vector是JDK1.0引入了,它的很多实现方法都加入了同步语句,因此是线程安全的(其实也只是相对安全,有些时候还是要加入同步语句来保证线程的安全),可以用于多线程环境。Vector源码剖析 Vector的源码如下(加入了比较详细的注释):
2016-03-16 17:41:35 579
原创 LinkedList源码分析
一、源码解析 1、 LinkedList类定义。 public class LinkedList extends AbstractSequentialList implements List, Deque, Cloneable, java.io.Serializable LinkedList 是一个继承于AbstractSequ
2016-03-16 11:32:06 375
原创 ArrayList源码分析
一、 ArrayList概述: ArrayList是基于数组实现的,是一个动态数组,其容量能自动增长,类似于C语言中的动态申请内存,动态增长内存。 ArrayList不是线程安全的,只能用在单线程环境下,多线程环境下可以考虑用Collections.synchronizedList(List l)函数返回一个线程安全的ArrayList类,也可以使用concurr
2016-03-15 23:06:30 463
原创 HashSet源码分析
一、 HashSet概述: HashSet实现Set接口,由哈希表(实际上是一个HashMap实例)支持。它不保证set 的迭代顺序;特别是它不保证该顺序恒久不变。此类允许使用null元素。 HashSet set=new HashSet(); set.add(null);//不报错,因为底层是hashmap key值允许null二、 HashSet的实现:
2016-03-15 22:03:54 418
原创 HashMap源码分析
考研时候数据结构中有对hash表算法的图示,最近在看hashmap的时候仔细看了下源码,同时结合了网上的资料重新再对hashmap整理了一下,梳理下记忆。
2016-03-06 18:12:26 929 2
原创 Java transient关键字使用
在看hashmap源码分析的时候,看到了关键字transient的使用,自己对这个貌似接触的较少,有人说是在对象实现serilizable序列化的时候,用这个关键字可以屏蔽一些不需要在网络传输的字段属性,比如用户名和密码,对于对象的属性的传输只会在用户的内存中进行,不会具体保存在磁盘。具体的看到一篇文章,如下:1. transient的作用及使用方法 我们都知道一个对
2016-03-05 23:40:41 458
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人