自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+
  • 博客(61)
  • 收藏
  • 关注

原创 Spring AOP理论详解

文章目录Sprign AOP理论详解基本知识什么是 AOP术语Aspect(切面)advice(增强)连接点(join point)切点(point cut)关于join point 和 point cut 的区别introduction目标对象(Target)AOP proxy织入(Weaving)advice 的类型关于 AOP Proxy彻底理解 aspect, join point, po...

2019-09-09 15:11:56 291

原创 容易误解的==和equals的区别与联系

文章目录java中==、equals和hashCode的区别与联系==equalshashCodeequals和hashCode的区别与联系java中==、equals和hashCode的区别与联系====是java运算符,用于比较两个操作数的关系,返回一个boolean类型的结果。**具体含义:**如果两个操作数是基本数据类型,比较值是否相等。如果两个操作数是引用类型,那么比较的是内存地...

2019-09-09 15:08:21 153

原创 剑指Offer29:数组中出现次数超过一半的数字问题

数组中出现次数超过一半的数字问题问题描述数组中有一个数字出现的次数超过数组长度的一半,请找出这个数字。例如输入一个长度为9的数组{1、2、3、2、2、2、5、4、2}。由于数字2在数组中出现了5次,超过数组长度的一半,因此输出2.问题分析: * 如果数组是一个排序数组,那么很容易找出出现次数超过一半的数字(位于数组中间位置的数字),但是对数组排序的时间复杂度为o(nlogn),因...

2019-09-06 10:08:59 154

原创 剑指Offer28:常见的三个字符串问题

常见的三个字符串问题问题1、从第一个字符串中删除在第二个字符串中出现的所有字符。问题描述定义一个函数,输入两个字符串,从第一个字符串中删除在第二个字符串中出现的所有字符。public class Code028_05 { public static void main(String[] args){ Scanner sc=new Scanner(System.in)...

2019-09-06 10:03:01 144 1

原创 剑指Offer28:找到字符串中第一个只出现一次的字符

找到字符串中第一个只出现一次的字符问题描述在一个字符串(0<=字符串长度<=10000,全部由字母组成)中找到第一个只出现一次的字符,并返回它的位置, 如果没有则返回 -1(需要区分大小写)问题分析:char是一次长度为8的数据类型。因此有256中可能。创建一个大小为256的数组,下标对应ASCII码值,存储的数是出现的次数。public class Code028_04 {...

2019-09-06 09:55:11 104

原创 剑指Offer28:字符排列组合问题高级版

n皇后问题问题描述N皇后问题,在一个NN的棋盘上放置N个皇后,使其不能互相攻击(同一行、同一列、同一斜线上的皇后都会自动攻击),即任意两个皇后不得处于同一行、同一列、同意斜线上。问题分析我们可以定义一个数组Column[N]来存放每一行皇后的列号,数组中第i个数字就表示位于第i行的皇后的列号;并将0、1、2、3、4…N-1分别放入数组中放入时候判断是否在同一列,以及是否为一条斜线。pub...

2019-09-06 09:52:23 81

原创 剑指Offer28:排列组合问题升级版

正方体顶点排列问题问题描述输入一个含有8个数字的数组,判断有没有可能把这8个数字分别放到正方体的8个顶点上,使得正方体上三组相对的面上的4个顶点的和相等。问题分析: * * 这就相当于先得到a1,a2,a3,a4,a5,a6,a7,a8这8个数字的所有排列,然后判断有没有一个的排列符合题目给定的条件,即a1+a2+a3+a4=a5+a6+a7+a8, * * a1+a3+a5+a7=...

2019-09-06 09:47:55 137

原创 剑指Offer28:字符串排列问题

字符串排列问题问题描述输入一个字符串,打印出该字符串中字符的所有排列。例如输入字符串abc,则打印出字符a、b、c所能排列出来 的所有字符串abc、bac、bca、cab、cba。问题分析 * 求整个字符串的全排列,可以看成两步: * 第一步、首先求所有可能出现在第一个位置的字符,即把第一个字符和后面所有的字符交换; * 第二步、固定第一个...

2019-09-06 09:40:19 84

原创 剑指Offer27:二叉树转双向链表问题

二叉树转双向链表问题问题描述* 问题描述 * 输入一棵二叉搜索树,将该二叉搜索树转换成一个排序的双向链表。“要求不能创建任何新的结点”,只能调整树中结点指针的指向。例如输入前序遍历为 * 10、6、4、8、14、12、16的二叉搜索树,其输出的转换后排序双向链表为:4、6、8、10、12、14、16问题分析* 问题分析: * 在二叉树中,每个结点都有两...

2019-09-06 09:34:47 179

原创 剑指Offer26:复杂链表的复制问题

复杂链表的复制问题问题描述 * 题目描述: * 请实现函数ComplexListNode(ComplexListNode pHead),复制一个复杂链表。在复杂链表中,每个结点除了有一个m_pNext指针指向下一个结点 * 之外,还有一个m_pSibling指向链表中的任意结点或者NULL。问题分析 * 问题分析: * 最原始的解法:分两步,第一步复制...

2019-09-02 16:12:20 104

原创 剑指Offer25:二叉树路径问题

二叉树路径问题问题描述输入一棵二叉树和一个整数,打印出二叉树中结点值的和为输入整数的所有路径。从树的根结点开始往下一直到叶子结点所经过的结点形成一条路径。问题分析当用前序遍历的方式访问到某一个结点时,我们把该结点添加到路径上,并累加该结点的值。如果该结点为叶子结点并且路径中结点值的和刚好等于输入的整数,则当前的路径符合要求,我们把它打印出来。如果当前结点不是叶子结点,则继续访问它的子结点。...

2019-09-02 16:09:37 89

原创 剑指Offer24:判定数组是否为二叉树遍历序列

二叉树遍历序列判定问题问题描述输入一个整数数组,判断该数组是不是某二叉搜索树的后序遍历的结果。如果是则返回true,否则返回false,假设输入的数组的任意两个数字都互不相同。问题分析在后序遍历得到的序列中,最后一个数字是树的根结点的值。数组中前面的数字可以分为两部分:第一部分是左子树结点的值,它们都是比根结点的值小;第二部分是右子树结点的值,它们都比根结点的值大。以数组{5、7、6、9...

2019-09-02 16:06:43 226

原创 剑指Offer23:二叉树按层打印问题

二叉树按层打印问题问题描述从上往下打印二叉树的每个结点,同一层的结点按照从左到右的顺序打印。问题分析从上到下打印二叉树是有规律的;每次打印一个结点的时候,如果该结点有子结点,则把该结点的子结点放到一个队列的末尾,接下来到队列的尾部取出最早进入队列的结点,重复前面的打印操作,直至队列中所有的结点都被打印出来为止。不管是广度优先遍历一个有向图还是一棵树,都要用到队列。第一步我们把起始结点(对...

2019-09-02 16:03:18 83

原创 剑指Offer22:出栈序列判定问题

出栈序列判定问题问题描述输入两个整数序列,第一个序列表示栈的压入顺序,请判断第二个序列是否为该栈的弹出顺序。假设压入栈的所有数字均不相等,例如序列1、2、3、4、5是某栈的压入栈序列,序列4、5、3、2、1是该压栈序列对应的一个弹出序列,但是4、3、5、1、2就不可能是该压栈序列的弹出序列了。问题分析建立辅助栈,把输入的第一个序列中的数字依次压入到该辅助栈,并按照第二个序列的顺序依次从该栈...

2019-09-02 16:00:06 80

原创 剑指Offer20:矩阵顺时针打印问题

矩阵顺时针打印问题问题描述输入一个矩阵,按照从外向里以顺时针的顺序打印出每一个数字。例如,如果输入的矩阵为:1 2 3 45 6 7 89 10 11 1213 14 15 16则依次打印出数字:1、2、3、4、8、12、16、15、14、13、9、5、6、7、11、10问题分析:矩阵打印问题,直接借助于循环遍历即可完成,关键是确定循环结束的...

2019-08-31 16:06:00 106

原创 剑指Offer19:二叉树的镜像问题

二叉树的镜像问题问题描述请编写一个函数,完成输入一个二叉树,该函数输出它的镜像。问题分析所谓二叉树的镜像,其实就是对于二叉树中所有的非叶子节点,交换它们的左右子节点的位置;解题过程可如下:首先,前序遍历该二叉树的每一个结点,如果遍历到的结点有子结点,就交换它的两个子结点。当交换完所有的非叶子节点的左右子结点之后,就得到了该树的镜像。public class Code019 { ...

2019-08-31 16:01:47 79

原创 剑指Offer18:二叉树的遍历问题

二叉树的遍历方式大全问题描述构建前序遍历和中序遍历分别为:8,8,9,2,4,7,7和 9,8,4,2,7,8,7的二叉树;问题分析二叉树的遍历主要有四种:前序遍历,中序遍历,后序遍历和层级遍历;前、中、后序主要说的是根结点的访问顺序;前序遍历中先访问根结点,然后访问左子树,然后再访问右子树;中序遍历中,先访问左子树,在访问根结点然后再访问右子树,依次类推。。。层级遍历值得是,每次都遍历...

2019-08-31 15:59:28 110

原创 剑指Offer18:二叉树子结构判断问题

二叉树子结构判断问题问题描述输入两棵二叉树A和B,判断B是不是A的子结构。问题分析和链表相比,树中的指针更多,操作更为复杂;要查找树A中是否存在和树B结构一样的子树,可以分两步:1、在树A中找到和B的根节点的值一样的结点R;2、判断树A中以R为根节点的子树是不是包含树B一样的结构。第一步,在二叉树A中查找与根结点的值一样的结点,实际就是树的遍历。对于二叉树,遍历有两种方式,递归法和循...

2019-08-30 10:52:46 120

原创 剑指Offer17:有序单链表的合并问题

有序单链表的合并问题题目描述输入两个递增排序的链表,合并这两个链表并使新链表中的结点仍是按照递增排序的。例如链表1为:1->3->5->7 链表2为:2->4->6->8则合并后的链表为:1->2->3->4->5->6->7->8问题分析由于两个链表均是递增的有序链表,因此我们只需要定义两个指针分别...

2019-08-30 10:20:25 140

原创 剑指Offer16:单链表反转问题

单链表反转问题问题描述单链表反转:定义一个函数,输入一个链表的头结点,反转该链表并输出反转后链表的头结点。问题分析单链表的反转问题较为简单,毫无疑问采用指针的方式来进行链表反转;注意:在调整第i个节点之前,为了保证链表不被断裂;首先需要定义指针记录,i的前一个结点的位置。public class Code016 { public static void main(String[...

2019-08-29 15:16:29 84

原创 剑指Offer15:打印单链表倒数第k个节点

单链表倒数第k个节点问题问题描述输入一个链表,输出该链表中倒数第k个节点。注意链表结点计数从1开始,即链表的尾结点是倒数第1个结点。例如一个链表有6个结点,从头开始它们的值依次为1、2、3、4、5、6。这个链表的倒数第3个结点是值为4的结点。问题分析由于是单链表所以,要想找到倒数第k个结点,首先得知道链表长度,进行一次遍历得到链表的长度length,然后用length-k+1即得到需要遍历...

2019-08-29 14:34:07 295 1

原创 剑指Offer14:数组调序问题高级版

整数数组调序问题,升级版问题描述输入一个整数数组,实现一个函数来调整该数组中数字的数字顺序,但是条件不确定,有可能要求使得所有的奇数位于数组的前半部分,所有的偶数位于数组的后半部分;也有可能,要求所有的负数在非负数的前面;也有可能,要求能被3整除的放在不能被3整除的数的前面…。问题分析由于数据调整的要求(条件)不确定,因此,我们需要自定义一个描述条件的函数,然后再具体的方法里调用该函数进行...

2019-08-29 14:13:57 91

原创 剑指Offer14:数组调序问题升级版

整数数组调序升级版问题问题描述输入一个整数数组,实现一个函数来调整该数组中数字的数字顺序,使得所有的奇数位于数组的前半部分,所有的偶数位于数组的后半部分。(要求所有的奇数按照从小到大排好序,同时所有的偶数也从小到大排序好)解题思路:本问题是上一个问题的延伸,在对数组的奇偶元素顺序调整之后,还必须对两段序列(奇序列和偶序列)分别排序;本题的解题思路是,先采用双指针法对数组中奇偶元素进行调整,...

2019-08-29 14:11:06 97

原创 剑指Offer14:整数数组,奇偶数调序问题

整数数组奇偶数调序问题题目描述:输入一个整数数组,实现一个函数来调整该数组中数字的数字顺序,使得所有的奇数位于数组的前半部分,所有的偶数位于数组的后半部分。解题思路:如果不考虑时间复杂度,最简单的思路就是从头扫描这个数组,每碰到一个偶数时,拿出这个数字,并把位于这个数字后面的所有的数字往前挪一位。挪完之后在数组的末尾有一个空位,这时把该偶数放入这个空位。这样每碰到一个偶数就需要移动O(n...

2019-08-29 11:40:12 101

原创 剑指Offer13:o(1)时间复杂度下删除单链表某一节点

o(1)时间复杂度下删除单链表节点问题题目描述给定单向链表的头指针和一个结点指针,定义一个函数在O(1)时间删除该结点。问题分析如果我们想要删除结点i,可以从链表的头结点a开始遍历,发现结点h的m_pNext指向要删除的结点i,于是我们可以把结点h的m_pNext指向i的下一个节点j指针调整后,我们就可以安全的删除结点i,并保证链表没有断开。但是这种思路的时间复杂度为o(n).也可以先将...

2019-08-29 11:34:59 128

原创 剑指Offer12:n位最大十进制数问题

n位最大十进制数问题题目描述键盘输入一个整数n,要求编写函数实现按顺序打印出从1开始到最大的n位十进制数。例如输入3,则打印输出1、2、3…999;最大的3位数是999.注意由于没有指定n的范围因此n有可能会很大,例如50,100等,此时最大的n位十进制数将超出int和long的范围,因此不宜使用int和long来定义临时变量。public class Code012 { pub...

2019-08-29 11:32:05 217

原创 剑指Offer11:a的b次方问题

a的b次方问题题目描述实现一个函数double Power(double base,int exponent),求base的exponent次方,不得使用库函数,同时不需要考虑大数问题。解题思路:注意输入的边界状态(特殊情况),输入base为0的时候是没有意义的,是否输出异常信息?其次当exp小于0的时候,base的exponent次方其实就等于base的-exponent次方然后求导。...

2019-08-29 11:20:46 261

原创 剑指Offer10:整数对应二进制中1的位数问题

整数对应二进制中1的位数问题题目描述:实现一个函数,输入一个整数,输出该数二进制表示中1的个数。例如把9表示成二进制是1001,有2位是1.因此如果输入是9,则该函数输出是2.解题思路:思路一:先判断整数二进制表示中最左边一位是不是1.接着把输入的整数右移一位,此时原来处于从右边数起的第二位被移到最右边了,再判断是不是1.这样每次移动一位,直到整数变为0为止;但是问题是,如果输入一个负数...

2019-08-29 11:10:45 234

原创 剑指Offer09:斐波拉契数列数列问题

斐波拉契数列问题题目描述:斐波拉契数列问题:要求实现键盘输入一个数n,输出斐波拉契数列的第n项。斐波拉契数列定义:f(0)=0;f(1)=1;f(n)=f(n-1)+f(n-2);解题思路:按照斐波拉契地推公式很容易想到的方法就是采用递归来求解,但是递归方法存在很严重的效率问题;例如要求f(10),需要先求f(9)和f(8),同样要求f(9)必须先求f(8)和f(7),以此类推发现存在较多...

2019-08-29 10:20:28 166

原创 剑指Offer08:数组旋转问题

数组旋转问题题目描述把一个数组最开始的若干个元素搬到数组末尾,我们称之为数组的旋转。输入一个递增排序的数组的一个旋转,输出数组最小的元素。例如数组{3,4,5,1,2}为{1,2,3,4,5}的一个旋转,该数组的最小值为1。解题思路采用二分法的思路,设定两个指针分别指向数组的第一个元素和最后一个元素。(第一个元素应该是大于或者等于最后一个元素的,存在特例)找到数组中间的元素(mid=(he...

2019-08-29 10:11:02 69

原创 Spring中常用注解一览

文章目录Spring中常用注解第一类Bean注解第二类属性变量注解第三类其它类型注解Spring中常用注解第一类Bean注解@Controller:用于标注控制层组件;  @Controller用于标记在一个类上,使用它标记的类就是一个SpringMVC Controller对象,分发处理器将会扫描使用被该注解器注解的类的方法,并检测该方法是否使用了@RequestMapping注解。...

2019-08-29 09:26:09 261

原创 java中线程的生命周期及对应的5种状态

文章目录java中线程生命周期大致分为5个状态初始状态可运行状态运行状态死亡状态阻塞状态等待队列锁池状态几个方法的比较java中线程生命周期大致分为5个状态新建(NEW):新创建了一个线程对象。可运行(RUNNABLE):线程对象创建后,其他线程(比如main线程)调用了该对象的start()方法。该状态的线程位于可运行线程池中,等待被线程调度选中,获取cpu 的使用权 。运行(RUN...

2019-08-29 08:53:07 590

原创 剑指Offer07:员工年龄排序问题

员工年龄排序问题问题描述实现一个排序算法,对公司员工的年龄进行排序(几万名员工,员工的年龄分布在一个区间),要求时间复杂度为o(n)空间复杂度不得超过o(n);例如输入:24 21 23 21 20 21 22 21 21 25 26 20解题思路首先定义一个用来存储统计各年龄对应人数的数组,该数组的长度为年龄跨度(在此定义为100),然后遍历员工年龄数组,将所有相同年龄的员工总数存入数组...

2019-08-28 21:52:59 282

原创 剑指Offer06:根据前序遍历和中序遍历结果重建二叉树

已知前序遍历和中序遍历结果重建二叉树问题描述输入某二叉树的前序遍历和中序遍历的结果,请重建出该二叉树。假设输入的前序遍历和中序遍历的结果中都不含有重复的数字。例如输入的前序遍历序列{1,2,4,7,3,5,6,8}和中序遍历序列{4,7,2,1,5,3,8,6},则重建出它的二叉树并输出它的头结点。解题思路在二叉树的前序遍历中,第一个数字总是树的根节点的值。扫描中序遍历序列,就能确定更节点...

2019-08-28 21:04:47 102

原创 剑指Offer05:单链表逆向打印问题

单链表逆向打印问题问题描述输入一个链表的头结点,要求从尾到头反过来打印输出每一个节点的值。解题思路1、第一反应采用栈,从头到尾遍历,依次将遍历所得节点入栈;最后依次出栈;但是java中没有原生的栈结构,需要自己定义,因此可以采用数组来代替栈,但是需要遍历两次链表,第一次获取到链表长度,第二次遍历依次获取元素并存入数组;最后将数字从尾到头依次输出。2、采用递归的方法来实现(递归的本质就是一...

2019-08-28 20:58:25 99

原创 剑指Offer04:数组升级版,有序数组合并问题

有序数组合并问题题目描述键盘接收两行输入,为两个均为从小到大的有序数组(整数数组)。要求编写函数,实现一行输出,且从小到大排序。解题思路解题思路:1、先定义一个数字(长度为两个数组长度之和),直接将两个数字复制到新的数字,然后对新数组排序(快排)。2、先定义一个数字(长度为两个数组长度之和),定义两个指针分别指向两个数组的尾,每次取出两数组的尾部元素,比较,将其中大者放在后面,小的放在...

2019-08-28 20:50:21 69

原创 剑指Offer04:字符串空格替换

字符串空格替换问题题目描述题目描述:请实现一个函数,把字符串中的没有个空格替换成“%20”。例如,输入“We are happy.”,则输出“We%20are%20happy.”。解题思路由于数组在定义时必须指定其长度,因此必须先统计有多少个空格,然后计算新数组的长度为:length+2*(空格数);因为%20占三个位置,而原来的空格占一个位置。然后从头或者从尾遍历依次将原字符串中字符复制...

2019-08-28 20:17:07 69

原创 剑指offer03:二维数组中查找给定数据

二维数组中查找指定数据问题题目描述:题目:二维数组中数据查找题目描述:在一个二位数组中,每一行按照从左到右递增的顺序排序,每一列都按照从上到下递增的顺序排序。请完成一个函数,输入一个这样的二维数组和一个整数判断数组中是否含有该整数。若含有则输出true若不含有则输出false。解题思路解题思路:思路一:暴力遍历法(两层for循环,外层遍历行,内存遍历列,挨个遍历并比较),但是这样时间复...

2019-08-28 20:09:25 99

原创 字符串回文串问题

判断一个整数是否是回文数题目描述:判断一个整数是否是回文数。回文数是指正序(从左向右)和倒序(从右向左)读都是一样的整数。例如:输入: 121输出: true输入: -121输出: false解释: 从左向右读, 为 -121 。 从右向左读, 为 121- 。因此它不是一个回文数。public class LeetCode_09_huiwenshu { publi...

2019-08-26 19:11:12 81

原创 最长子串问题

最长子串问题问题描述:给定一个字符串,请你找出其中不含有重复字符的 最长子串 的长度。示例:输入: “abcabcbb”输出: 3解释: 因为无重复字符的最长子串是 “abc”,所以其长度为 3。public class LeetCode_03_zifuchuan { public static void main(String[] args){ Scann...

2019-08-26 19:07:38 653

空空如也

空空如也

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

TA关注的人

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