自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+

沙漏

一步步从无到有的创造

  • 博客(27)
  • 收藏
  • 关注

原创 Java集合详解系列----Java集合继承体系详解

Java的集合类是一种特别有用的工具,它可以用于存储数量不等的多个对象,并可以实现常用的数据结构,如栈、队列等。Java集合还可以用于板寸具有映射关系的关联数组。java集合就像是一个容器,我们可以把多个对象(实际上是对象的引用,习惯上叫对象,)保存到集合容器中。在JDK1.5以前java集合会丢失容器中所有对象的数据类型,JDK1.5以后增加了泛型,java集合可以记住容器中对象的数据类型。

2016-06-30 16:03:19 7228 2

原创 二叉树的非递归遍历的解析与实现----java实现

先序遍历根据先序遍历的访问的顺序,先访问根节点,然后再访问左子树和右子树。对于树中的任意一个节点,都可以看做是一个根节点(也可以看成是一个树),因此可以直接访问根节点,访问完根节点,如果它的左子树不为空,用相同的方法访问它的左子树,直到左子树为空,再访问它的右子树。 对于树中的任意一个节点p:(1)访问p,并将节点入栈;(2)判断节点p的左孩子是否为空.若不为空,则将p的左孩子置为

2016-06-30 10:23:37 3201

原创 二叉树的递归遍历----java实现

public class Iterator2{ //先序遍历 public void preIterator(BiTree root) { if(root != null) { System.out.print(root.val + "-->"); preIterator(root.left); preIterator(root.right);

2016-06-30 09:59:37 469

原创 Java中字符串的创建与储存(附:常见笔试面试题)

常量池在java用于保存在编译期已确定的,已编译的class文件中的一份数据。它包括了关于类,方法,接口等中的常量,也包括字符串常量,如String s = "java"这种申明方式;当然也可扩充,执行器产生的常量也会放入常量池,故认为常量池是JVM的一块特殊的内存空间。一、字符串的创建与初始化在java中创建并初始化一个String对象,最常见的有两种方式(1)String st

2016-06-27 22:12:49 1758

原创 Java的异常处理机制

Java的异常处理可以让程序具有更好的容错性,程序更加健壮。当程序出现意外情况的时候,系统会自动生成一个Exception对象来通知程序,从而实现将“业务功能实现代码”和“错误处理代码”分离,提供更好的可读性。一、异常类的继承体系(1)在java中把异常当作对象来处理,并且定义一个基java.lang.Throwable作为所有异常的超类。在java API中定义很多异常类,jav

2016-06-27 10:43:11 446

原创 剑指offer----丑数

题目:把只包含因子2、3和5的数称作丑数(Ugly Number)。例如6、8都是丑数,但14不是,因为它包含因子7。 习惯上我们把1当做是第一个丑数。求按从小到大的顺序的第N个丑数。(1)一个数m是另外一个数n的因子,是指n%m == 0.        丑数:假如n是丑数则n = 2^x * 3^y * 5^z (x>=0 ,y>=0, z>=0)方法一:遍历法

2016-06-23 16:22:04 418

原创 剑指offer-----栈的压入弹出序列

题目:输入两个整数序列,第一个序列表示栈的压入顺序,请判断第二个序列是否为该栈的弹出顺序。假设压入栈的所有数字均不相等。例如序列1,2,3,4,5是某栈的压入顺序,序列4,5,3,2,1是该压栈序列对应的一个弹出序列,但4,3,5,1,2就不可能是该压栈序列的弹出序列。思路:(1)建立一个辅助栈,按第一个序列中的数字依次压入栈中,这种是出栈和入栈交替进行的,所以每次在入栈一个元素后,需

2016-06-23 09:41:33 488

原创 剑指offer----包含min函数的栈

题目:定义栈的数据结构,请在该类型中实现一个能够得到栈的最小元素的min函数。在该栈中调用 min、push、pop的时间复杂度都为O(1)。思路:入栈:利用辅助栈,每次入栈时,如果入栈的元素大于辅助栈的栈顶元素,则辅助栈中压入与栈顶相同的元素,如果入栈的元素小于辅助栈栈顶的元素,则把该元素压入辅助栈中。这样辅助栈的栈顶元素就是栈中最小的元素。出栈:辅助栈和被辅助栈中元素个数始终保

2016-06-22 10:25:00 291

原创 剑指offer----合并两个排序的链表

输入两个递增排序的链表,合并两个链表并使新链表中的节点仍然是按照递增排序的。一、合并两个链表的过程(递归)(1)从合并两个链表的头节点开始   如果链表1的头节点的值小于链表2的头节点的值,则链表1的头节点是合并后的头节点,反之,链表2的头节点是合并后的头节点。(2)剩下的节点中依然是排序的,再对比链表1和链表2,按(1)找出剩下的链表中节点的头节点以此类推,此问题就是典型的递

2016-06-21 15:43:21 408

原创 剑指offer----反转链表

题目:定义一个方法 输入一个链表的头节点,反转该链表并输出反转后链表的头节点为了正确反转一个链表,需要调整链表每个节点对下一个节点的指向。思路:(1)把当前节点的下一个节点保存起来  当前节点的next指向它前一个节点之前要把它的后一个节点保存起来。因为后一个节点只能通过当前节点的next找到,如果不提前保存起来,当前节点的next指向它的前一个节点后,它后面的节点将失去引用找不到了。

2016-06-21 10:45:54 365

原创 剑指offer----用两个栈实现队列

用两个栈实现一个队列,分别完成在队列尾部插入节点和在队列头部删除节点的功能思路:(1)队列是一种“先进先出”的数据结构,而栈是“先进后出”的数据结构,现在要用两个栈实现队列的出队和入队功能。(2)栈1用来入队,那么先入队的元素在栈的栈底,出队时,栈底元素得先出来。(3)  入队:让栈1用来入队,所有需要入队的元素都压入栈1       出队:(1)若栈2为空,则把栈1中的元素弹

2016-06-20 16:11:11 306

原创 剑指offer----链表中倒数第K个结点

输入一个链表,输出该链表中倒数第K个结点。从1开始计数,即该链表的尾节点是倒数第一个结点。思路:一、链表是单向链表,只能从头结点往后依次遍历,倒数第K个结点,也就是从头结点开始的n-(k-1)个结点。但是需要先遍历一遍得到链表长度,然后在找第n-k+1的K结点。二、(1)方法一需要对链表进行二次遍历,如果我们使用两个指针,让走快的指针走到最后一个结点的时候走的慢的指针刚好走到倒数第

2016-06-20 11:31:20 319

原创 剑指offer----从尾到头打印链表

思路一:链表遍历的顺序是从头到尾,但是要求输出时是从尾到头。这可以借助栈来实现,每遍历到一个节点的时候将其压入栈中。当遍历完以后再从栈中将节点的值一一取出存放到arraylist中。从栈中先取出来的是原来链表最后的节点,这样就实现了从尾到头的打印。/*** public class ListNode {* int val;* ListNode nex

2016-06-20 09:41:26 253

原创 剑指offer--空格替换

空格替换请实现一个函数,将一个字符串中的空格替换成“%20”。例如,当字符串为We Are Happy.则经过替换之后的字符串为We%20Are%20Happy。问题1:将空格替换成字符串,字符串将边长。若要是在原来的字符串上做替换,则保证字符串后面有足够的剩余空间。问题2:若从头到尾的方向去替换,则每遇到一个空格,这个空格后面所有的字符都得向后移动两位,有的字符会被多次移动。解决

2016-06-19 17:09:45 347

原创 队列----循环队列的实现

为了可以重新利用队列底层数组中已删除元素所占的空间,消除可能出现的“假满”现象,将顺序队列改进为循环队列。循环队列是首尾相连的队列:当front、rear变量达到底层数组的capacity-1之后,再向前以为就变成0.入队:(1)判断队列是否已满,已满抛出越界异常             (2)不满的话把元素查到队尾,并且rear+1,然后判断此时的rear是否已经等于capacity

2016-06-17 10:29:17 427

原创 链表---双向链表的解析与实现

(1)如果为每个节点保留两个引用prve和next,让prev指向当前节点的上一个节点,让next指向当前节点的下一个节点。此时链表既可以向前依次访问每个节点,也可以向后依次访问每个节点,这种形式的节点称为双向链表。(2)双向链表的查找   因为双向链表既可以向前搜索也可以向后搜索,当被搜索节点更靠近head或者tail中的某一端时,就从那一端开始搜索index从head开始搜索,in

2016-06-16 19:34:14 476

原创 栈---顺序栈的实现

一、(1)栈是在一种特殊的线性表,它代表只能在某一端进行插入、删除操作,通常在线性表的尾端进行插入、删除操作.(2)对于栈而言,通常允许插入、删除操作的一端被称为栈顶(top),另一端被称为栈底(buttom).(3)从栈顶压入元素称为进栈(push).(4)从栈顶删除元素称为出栈(pop).栈是一种先进后出的线性表.二、顺序栈的实现   顺序栈就是顺序储存结构的栈,它

2016-06-16 18:42:21 505

原创 队列---链式队列及其实现

一、(1)采用链式储存结构的队列称为链队列。(2)队列采用front和rear分别指向队列的头、尾两个节点。(3)链式队列采用链式结构来保存队列中的所有元素,该队列允许添加无限多个元素,链式队列无队列满的问题。二、实现public class LinkQueue{ //定义节点类 private class Node { private T data;

2016-06-16 18:35:45 380

原创 队列---顺序队列及其实现

1)系统采用一组地址连续的存储单元依次存放队列从rear端到front端的所有数据,程序只需要front和rear两个整型变量来记录队列front端的元素索引和rear端的元素索引。 (2)顺序队列的front总是保存着即将出队的元素的索引,顺序队列中的rear总是保存着下一个即将进入队列的元素的索引。 (3)队列中元素的个数是rear - front. (4)顺序队列的底层采用的是数

2016-06-16 18:29:04 560

原创 剑指offer----二维数组中的查找的解析与实现

题目:在一个二维数组中,每一行都按照从左到右递增的顺序排序,每一列都按照从上到下递增的顺序排序。请完成一个函数,输入这样的一个二维数组和一个整数,判断数组中是否含有该整数。解析: (1)该数组是有序的  从左到右 从上到下 都是递增的 这是问题的关键 (2)从左下角或者右上角查找  从左下角查找:target比当前元素大,右移。                target比

2016-06-14 15:49:10 499

原创 剑指offer----矩形覆盖问题的解析与实现

问题:我们可以用2*1的小矩形横着或者竖着去覆盖更大的矩形。请问用n个2*1的小矩形无重叠地覆盖一个2*n的大矩形,总共有多少种方法?解析:此类问题和青蛙跳台阶n个 每次可以跳一个台阶或者两个台阶 一共有多少次跳法 本质是一样的 当n=1,矩阵为2*1,只有横着覆盖1种方法 当n=2,矩阵为2*2,有横着覆盖和竖着覆盖2种方法 当n>=2时,设有F(n)种覆盖方法

2016-06-14 14:20:28 790

原创 剑指offer----青蛙跳台阶的解析与实现

(1)一只青蛙一次可以跳上 1 级台阶,也可以跳上2 级。求该青蛙跳上一个n 级的台阶总共有多少种跳法。(2)一只青蛙一次可以跳上1级台阶,也可以跳上2 级……它也可以跳上n 级,此时该青蛙跳上一个n级的台阶总共有多少种跳法?问题一分析:当n=1,有一种跳法      当n=2,一次跳一个跳两次,一次跳两个跳一次,共两种跳法     当n>=2时,n个台阶,设有F(n)种跳法

2016-06-14 13:08:04 4128 1

原创 剑指offer----斐波那契数列的实现--递归和迭代

1、定义斐波那契数列指的是这样一个数列:1, 1, 2, 3, 5, 8, 13, 21, 34, 55, 89, 144,…这个数列从第三项开始,每一项都等于前两项之和。在数学上,斐波纳契数列以如下被以递归的方法定义:F0=0,F1=1,Fn=Fn-1+Fn-2(n>=2,n∈N*),2、递归实现  递归满足2个条件:    1)有反复执行的过程(调用自身)2)有跳出

2016-06-13 21:44:50 566

原创 栈---链式栈的实现

一、(1)栈是在一种特殊的线性表,它代表只能在某一端进行插入、删除操作,通常在线性表的尾端进行插入、删除操作.(2)对于栈而言,通常允许插入、删除操作的一端被称为栈顶(top),另一端被称为栈底(buttom).(3)从栈顶压入元素称为进栈(push).(4)从栈顶删除元素称为出栈(pop).栈是一种先进后出的线性表.二、可以采用单链表来保存栈中的所有元素,这种结构

2016-06-13 18:58:34 500

原创 线性表--顺序储存结构 java实现

1、线性表:由n(n>=0)个数据元素组成的有限序列。   对于一个非空、有限的线性表,总具有如下特征:(1)总存在唯一的第一个数据元素(2)总存在唯一的最后一个数据元素(3)除第一个数据元素外,集合中的每一个数据元素都只有一个前驱的数据元素(4)除最后一个数据元素外,集合中的每个数据元素都只有一个后继的数据元素顺序存储结构:是指用一组地址连续的存储单元一次存放线性表的

2016-06-08 09:17:59 597

原创 单链表----java语言实现

节点  数据域:存放数据  指针域:存放下一个数据的地址1、常用操作  查找  插入  删除查找:(1)按照索引查找index位置上的节点:从头节点head开始依次向下找到第index位置的节点。(2)找到指定数据的索引位置:查找是否有节点中存放的数据与给定的数据相同,若有则返回节点的位置,没有返回-1.从头节点开始,一一对比。插入:(1)头插法:每次插

2016-06-07 15:43:44 4441 1

原创 Java中的隐藏和覆盖

1、编译时类型和运行时类型 Java的引用变量有两个类型,一个是编译时类型,一个是运行时类型编译时类型:由声明该变量时使用的类型决定运行时类型:由该变量指向的对象类型决定如果编译时类型和运行时类型不一致,会出现所谓的多态。因为子类其实是一种特殊的父类,因此java允许把一个子类对象直接赋值给一个父类引用变量,无须任何类型转换,或者被称为向上转型,由系统自动完成。如 Fath

2016-06-03 15:28:32 18691 12

空空如也

空空如也

TA创建的收藏夹 TA关注的收藏夹

TA关注的人

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