自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+

D.K专栏

欢迎志同道合者相互探讨

  • 博客(41)
  • 资源 (9)
  • 收藏
  • 关注

原创 程序员面试金典2.1:编写代码,移除未排序的链表中的重复节点

2.1编写代码,移除未排序的链表中的重复节点解法一:如果不得使用临时缓冲区,该怎么解决?要想移除链表中的重复节点,我们需要设法记录有哪些是重复的。这里只需要使用到一个简单的散列表。在下面的解法中,我们会直接迭代访问整个链表,将每个节点加入到散列表。若发现有重复的元素,将该节点从链表中移除,然后继续迭代。这个题目使用了链表,因此只需要扫描一次就能搞定。/** * */packag

2015-08-30 10:22:22 1110

原创 程序员面试金典1.8:判断翻转子串

1.8:假定有一个方法isSubstring,可检查一个单词是否为其他字符串的子串。给定两个字符串s1,s2,请编写代码检查s2是否为s1旋转而成,要求只能调用一次isSubstring比如waterbottle是erbottlewat旋转后的字符串解法:假定s2由s1旋转而成,那么,我们就可以找出旋转点在哪,例如,若以wat对waterbottle旋转,就会得到erbottlewat

2015-08-29 14:55:59 1193

原创 程序员面试金典1.7:若M*N矩阵中某个元素为0,则将其所在的行与列清零

1.7:编写一个算法,若M*N矩阵中某个元素为0,则将其所在的行与列清零。咋一看,这个问题很简单:直接遍历整个矩阵,只要发现值为0的元素,就将其所在的行与列清零。不过这种方法有个缺陷:在读取被清零的行与列时,读到的尽是零,于是所在的行与所在的列都变成了0,很快,整个矩阵都变成了0.避开这个缺陷的方法之一是新建一个矩阵标记零元素的位置。然后,在第二遍遍历矩阵的时候将0元素所在的行与列清零。这

2015-08-29 14:25:31 3652

原创 程序员面试金典1.6:将图像旋转90度。不占用额外内存空间

1.6 给定一副由N*N矩阵表示的图像,其中每个像素的大小为4字节,编写一个方法,将图像旋转90度。不占用额外的内存空间,能够做到?解法:要将矩阵旋转90度,最简单的做法就是一层一层进行旋转。对每一层指向环状旋转,将上边移到右边,右边移到下边,下边移到左边,左边移到上边。那么,该如何交换这四条边?一种做法是把上面复制到一个数组中,然后将左边移到上边,下边移到左边,等等。这需要占用O(n)的

2015-08-29 13:07:33 1333

原创 程序员面试金典1.5:实现字符串的压缩功能

1.5:利用字符重复出现的次数,编写一个方法,实现基本的字符串的压缩功能。比如,字符串“aabcccccaaa"会变成”a2b1c5a3",若压缩后的字符串没有变短,则返回原先的字符串。解法咋一看,编写这个方法似乎相当简单,实则有点复杂。我们会迭代访问字符串,将字符拷贝至新的字符串,并数出重复的字符。下面是Java的实现代码:public String compress(Strin

2015-08-29 10:39:56 1162 1

原创 程序员面试金典1.3: 确定两个字符串中一个重排后,能否变成另一个字符串

解法:跟其他问题一样,首先我们应该向面试官确认一些细节,弄清楚变位词比较是否区分大小写。比如,God是否为dog的变位词?此外,我们还应该问清楚是否要考虑空白的字符。这里假定变位词比较区分大小写,空白也要考虑在内。也就是说“god  "不是”dog"的变位词。比较两个字符串时,只要两者长度不同,就不可能是变位词。解决这个问题有两个解决方法,并且都采用了上述优化,即先比较字符串的长度

2015-08-26 22:36:28 1391

原创 程序员面试金典1.1:确定字符串的所有字符是否全都不同

1.1 实现一个算法,确定一个字符串的所有字符是否全都不同。假设不允许使用额外的数据结构,又该如何处理?解法:一开始,不妨先问问面试官,上面的字符串是ASCII字符串还是Unicode字符串。这很重要,问这个 问题表明你关注细节,并且对计算机科学有深刻的了解。为了简单起见,这里假设字符集为ASCII。若不是的话需要扩大存储空间,不过其余逻辑没有分别。假设字符集为ASCII,对于这个

2015-08-25 21:14:12 2099

原创 剑指Offer面试题51(Java版):数组中重复的数字

题目:在一个长度为n的数组里的所有数字都在0到n-1的范围内。数组中某些数字是重复的,但不知道有几个数字重复了,也不知道每个数字重复的次数。请找出数组中任意一个重复的数字。例如如果输入长度为7的数组{2,3,1,0,2,5,3},那么对应的输出是重复的数字2或者3.解决这个问题的一个简单的方法是先把输入的数组排序。从排序的数组中找出重复的数字是件容易的事情,只需要从头到尾扫描排序后的数组就

2015-08-12 08:36:41 6706 1

原创 剑指Offer面试题47(Java版):不用加减乘除做加法

题目:写一个函数,求两个整数之和,要求在函数体内不得适用+,-,* ,./  四则运算符号面试的时候被问道这个问题,首先我们分析人们是如何进行十进制的加法的,比如是如何得出5+17=22的结果的,实际上,我们可以分三步进行:第一步只做各位相加不进位,此时相加的结果是12,第二步做进位,5+7中有进位,进位的值为10;第三步,把前面的两个结果加起来12+10的结果是22,刚好5+17=22我

2015-08-11 20:49:22 1741

原创 剑指Offer面试题45(Java版):圆圈中最后剩下的数字

题目:0,1,,,,,n-1这n 个数字排成一个圆圈,从数字0开始每次从这个圆圈中删除第m个数字。求出这个圆圈里剩下的最后一个数字。例如,0,1,2,3,4这5个数字组成的一个圆圈,从数字0开始每次删除第3个数字,则删除的前四个数字依次是2,0,4,1因此最后剩下的数字是3.本题就是著名的约瑟夫环的问题。我们介绍两种方法:一种方法是用环形链表模拟圆圈的经典解法,第二种方法是分析每次被删除的

2015-08-11 20:08:24 2875

原创 剑指Offer面试题44(Java版):扑克牌的顺序

题目:从扑克牌中随机抽出5张牌,判断是不是一个顺子,即这五张牌是不是连续的。2——10为数字本身,A为1,J为11,Q为12,K为13,而大小王为任意数字。我们需要把扑克牌的背景抽象成计算机语言。不难想象,我们可以把五张牌看成由五个数字组成的数组。大小王是特殊的数字,我们不妨把他们定义为0,这样就能和其他牌区分开来了。接下来我们分析判断5个数字是不是连续的,最直观的方法是把数组排序。值得注

2015-08-11 08:30:43 2197 1

原创 剑指Offer面试题43(Java版):n个骰子的点数

题目:把n个骰子仍在地上,所有骰子朝上一面的点数之和为s,输入n,打印出s的所有可能的值出现的概率。

2015-08-11 08:11:32 4100

原创 剑指Offer面试题42(Java版):反转单词顺序VS左旋转字符串

题目一:输入一个英文句子,翻转句子中单词的顺序,但单词内字符的顺序不变。为简单起见,标点符号和普通字母一样处理。例如输入字符串为“I am a Student.",则输出为”Student. a am i".这个题目是流传甚广,很多公司都多次拿来作为面试题,很多应聘者也多次在各种博客或者书籍上见到过通过两次翻转字符串的解法,于是很快可以跟面试官说出自己的思路:第一步反转句子中所有的字符。比如翻

2015-08-10 20:48:11 4694 1

原创 剑指Offer面试题41(Java版):和为s的两个数字VS和为s的连续正数序列

题目一:输入一个递增排序的数组和一个数字s,在数组中查找两个数,使得它们的和正好是s。如果有多个数字的和等于s,输出任意一对即可。例如输入数组{1,2,4,7,11,15}和数字15.由于4+11=15,因此输出4和11.在面试的时候,很重要的一点是应聘者要表现出很快的反应能力。只要想到一个办法,应聘者就可以立马告诉面试官,即使这个办法不一定是最好的。比如这个问题,很多人会立即能想到O(n

2015-08-10 19:47:11 2281

原创 剑指Offer面试题40(Java版):数组出现一次的数字

题目:一个整型数组里除了两个数字之外,其他的数字都出现了两次。 * 请些程序找出这两个只出现一次的数字。要求时间复杂度为O(n),空间复杂度为O(1)例如输入数组{2,4,3,6,3,2,5,5},因为只有4,6这两个数字只出现一次,其他数字都出现了两次,所以输出4,6这是一个比较难的题目,很少有人在面试的时候不需要提示一下子想到最好的解决办法。一般当应聘者想了几分钟那个后还没有思路,

2015-08-10 19:04:19 2803

原创 剑指Offer面试题39(Java版):二叉树的深度

题目:输入一棵二叉树的根节点,求该数的深度。从根节点到叶结点依次进过的结点(含根,叶结点)形成树的一条路径,最长路径的长度为树的深度。例如,如下图的二叉树的深度为4,因为它从根节点到叶结点的最长的路径包含4个结点(从根结点1开始,经过2和结点5,最终到达叶结点7)我们可以从另一种角度来理解树的深度。如果一棵树只有一个结点,它的深度为1,如果根节点只有左子树而没有右子树,那么树的深度应该...

2015-08-10 08:42:12 4096 7

原创 剑指Offer面试题38(Java版):数字在排序数组中出现的次数

题目:统计一个数字在排序数组中出现的次数。例如输入排序数组为{1,2,3,3,,3,3,4,5}和数字3,由于3在这个数组中出现了4次,因此输出4既然输入的数组是排序的,那么我们很自然的想到利用二分查找算法。在题目给出的例子中,我们可以先用二分查找算法找到第一个3.由于3可能出现多次,因此我们找到的3的左右两遍可能都是3,于是我们在找到3的左右两边顺序扫描,分别找出第一个3和最后一个3.因

2015-08-09 22:37:57 1374

原创 剑指Offer面试题37(Java版):两个链表的第一个公共结点

题目:输入两个链表,找出它们的第一个公共结点。面试的时候碰到这道题,很多应聘者的第一反应就是蛮力法:在第一链表上顺序遍历每个结点,没遍历到一个结点的时候,在第二个链表上顺序遍历每个结点。如果在第二个链表上有一个结点和第一个链表上的结点一样,说明两个链表在这个结点上重合,于是就找到了他们的公共结点。如果第一个链表的长度为m,第二个链表的长度为n,显然该方法的时间复杂度为O(mn).通常蛮力法

2015-08-09 21:40:44 2553 1

原创 剑指Offer面试题36(Java版):数组中的逆序对

题目:在数组中的两个数字如果前面一个数字大于后面的数字,则这两个数字组成一个逆序对。输入一个数组,求出这个数组中的逆序对的总数例如在数组{7,5,6,4}中,一共存在5对逆序对,分别是{7,6},{7,5},{7,4},{6,4},{5,4}。看到这个题目,我们的第一反应就是顺序扫描整个数组。每扫描到一个数组的时候,逐个比较该数字和它后面的数字的大小。如果后面的数字比它小,则这两个数字就组

2015-08-09 20:04:05 3467

原创 剑指Offer面试题35(java版):第一个只出现一次的字符

题目:在字符串中找出第一个只出现一次的字符。如输入"abaccdeff",则输出'b'.看到这样的题目,我们最直观的想法就是从头开始扫描这个字符串中的字符。当访问某个字符时拿这个字符和后面的每个字符相比较,如果在后面没有发现重复的字符,则该字符就是只出现一次的字符。如果字符串有n个字符,每个字符可能与后面的O(n)个字符想比较,因此这种思路的时间复杂度为O(n2),面试官不会满意这种思路,它会

2015-08-09 16:14:41 4290

原创 剑指Offer面试题34(java版):丑数

题目:丑数 * 我们把只包含因子2,3,5的数称为丑数(Ugly Number). * 求按从小到大的顺序的第1500个丑数。 * 例如6,8都是丑数,但14不是,因为它含有因子7.习惯上我们把1当作第一个丑数方法一:逐个判断每个整数是不是丑数的解法,直观但不够高效:所谓一个数m是另一个数n的因子,是指n能被m整除,也就是说n%m==0.根据丑数的定义,丑数只能被2,3,5整除

2015-08-09 15:44:16 6563 4

原创 剑指Offer面试题33(java版):把数组排成最小的数

题目:输入一个正整数数组,把数组里面所有的数字拼接排成一个数,打印能拼接出的所有数字中的一个。例如输入数组{3,32,321},则打印出这3个数字能排成的最小数字321323.这个题目最直接的做法应该是先求出这个数组中的所有数字的全排列,然后把每个排列拼接起来,最后求出排列起来的数字的最小值。求数组的排列和面试题28非常相似。根据排列组合的只是,n个数字总共有n!排列,我们再来看一下更快的算法

2015-08-09 11:12:10 5102

原创 剑指Offer面试题32(java版):从1到n整数中1出现的次数

题目:输入一个整数n,求从1到n个整数的十进制表示中1出现的次数。例如输入12,从1到12这些整数中包含1的数字有1,10,11,和12,1一共出现了5次。方法一:不考虑时间效率的解法,靠它拿到Offer有点难:如果在面试的时候碰到这个问题,应聘者大多能想到最直观的方法,也就是累加1到n中每个整数1出现的次数。我们可疑每次通过对10求余数判断整数的个位数字是不是1.如果这个数字大于10,除

2015-08-09 08:49:48 2090 2

原创 剑指Offer面试题31(java版):连续子数组的最大和

题目:输入一个整型数组,数组里有正数也有负数。数组中一个或连续的多个整数组成一个子数组。 求所有子数组的和的最大值。要求时间复杂度为O(n)例如输入的数组为{1,-2,3,10,-4,7,2,-5}

2015-08-08 21:42:56 1816

原创 剑指Offer面试题30(java版):最小的k个数

题目:输入n个整数,找出其中最小的k个数。例如输入4,5,1,6,2,7,3,8这8个数字,则最小的4个数字是1,2,3,4

2015-08-08 20:47:08 4671

原创 剑指Offer面试题29(java版):数组中出现次数超过一半的数字

题目:数组中有一个数字出现的次数超过数组长度的一半,请找出这个数字。例如输入一个长度为9的数组{1,2,3,2,2,2,5,4,2}。由于数字2在数组中出现5次,超过数组长度的一半,因此输出2.

2015-08-08 19:25:35 3216

原创 剑指Offer面试题28(java版):字符串的排列

题目:输入一个字符串,打印出该字符串中字符的所有排列。例如输入字符串abc,则打印由字符a,b,c所能排列出来的所有字符串:abc,abc,bac,bca,cab,cba

2015-08-07 19:01:10 2130

转载 JVM的相关知识整理和学习

JVM虚拟机,是一种规范。在操作系统上建立的虚拟机,自己定义了一套统一的数据结构和操作指令,把同一套语言翻译给各大主流的操作系统,实现了跨平台性,可以说JVM是Java的核心,是Java可以一次编译到处运行的本质所在。一、JVM的组成和运行原理:JVM虽然符合冯诺依曼的计算机设计理念,但是他并不是实体计算机,所以他的组成也不是什么存储器、控制器、运算器,输入输出设备。在我看来,JVM放在运

2015-08-07 16:21:01 1325

原创 剑指Offer面试题27(Java版):二叉搜索树与双向链表

题目:输入一颗二叉搜索树,将该二叉搜索树转换成一个排序的双向链表。要求不能创建新的结点,只能调整树中结点指针的指向。比如如下图中的二叉搜索树,则输出转换之后的排序双向链表为:在二叉树中,每个结点都有两个指向子节点的指针。在双向链表中,每个结点也有两个指针,他们分别指向前一个结点和后一个结点。由于这两种结点的结构相似,同时二叉搜索树也是一种排序的数据结构,因此在理论上有可能实现二叉搜

2015-08-07 08:31:56 4477 4

原创 剑指Offer面试题25(Java版):二叉树中和为某一值的路径

题目:输入一颗二叉树和一个整数,打印出二叉树中结点值的和为输入整数的所有路径。从树的根节点开始往下一直到叶结点所经过的所有的结点形成一条路径。如下图,输入二叉树和整数22,则打印出两条路径,第一条路径包含结点10,12,第二条路径包含的结点为10,5,7.一般的数据结构和算法的教材都没有介绍树的路径,因此对大多数应聘者而言,这是一个新概念,也就很难一下子想出完整的解题思路。这个时候我们可以

2015-08-05 09:08:06 7331 2

原创 剑指Offer面试题24(Java版):二叉搜索树的后序遍历序列

题目:输入一个整数数组,判断该数组是不是某二叉搜索树的后序遍历的结果。如果是则返回true,否则返回false。假设输入的数组的任意两个数字都互不相同。例如输入数组{5,7,6,9,11,10,8}则返回true,因为这个整数序列是下图二叉树的后序遍历的结果。如果输入的数组是{7,4,6,5},由于没有哪颗二叉搜索树的后续遍历的结果是这个序列,因此返回false。在后序遍历得到的序

2015-08-04 20:26:12 2292 1

原创 剑指Offer面试题23(Java版):从上往下打印二叉树

题目:从上往下打印二叉树的每个结点,同一层的结点按照从左到右的顺序打印。例如输入下图的二叉树,则一次打印出8,6,10,5,7,9,11.这道题实质上考察的就是树的遍历算法,只是这种遍历不是我们熟悉的前序、中序或者后序遍历。由于我们不太熟悉这种按层遍历的方法,可能已下载也想不清楚遍历的过程。因为按层打印的顺序决定应该先打印的根节点,所以我们从树的根节点开始分析。为了接下来能够打印8

2015-08-03 20:41:47 3179

原创 剑指Offer面试题22(Java版):栈的压入、弹出序列

题目:输入两个整数序列,第一个序列表示栈的压入顺序,请判断第二个序列是否为该栈的弹出顺序。假设压入栈的所有数字均不相等。例如序列1,2,3,4,5是某栈的压栈序列,序列,4,5,3,2,1是该压栈序列对应的一个弹出序列,但4,3,5,1,2就不可能是该压栈序列的弹出序列。解决这个问题很直观的想法就是建立一个辅助栈,把输入的第一个序列中的数字依次压入该辅助栈,并按照第二个序列的顺序依次从该栈

2015-08-03 20:00:20 2770 1

原创 剑指Offer面试题21(Java版):包含min函数的栈

题目:定义栈的数据结构,请在该类型中实现一个能够得到栈的最小元素的min函数。在该栈中,调用min,push及pop的时间复杂度都是O(1).看到这个问题,我们的第一反应可能是每次压入一个新元素进栈时,将栈里的所有元素排序,让最小的元素位于栈顶,这样就能在O(1)时间得到最小元素了。但这种思路不能保证最后压入的元素能够最先出栈,因此这个数据结构已经不是栈了。我们接着想到在栈里添加一个成员变

2015-08-03 19:04:17 2813

原创 剑指Offer面试题20(Java版):顺时针打印矩阵

题目:输入一个矩阵,按照从外向里以顺时针的顺序依次打印出每一个数字。例如:如果输入如下矩阵: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.当遇到一个复杂的问题的时候,我们可以用图形来帮助我们来思考。由于是从外圈到内圈的顺序依次打印,我们可疑把矩阵想象成若干个

2015-08-02 20:41:00 4787 3

原创 剑指Offer面试题19(Java版):二叉树的镜像

请完成一个函数,输入一个二叉树,该函数输出它的镜像。

2015-08-02 17:03:43 3499

原创 剑指Offer面试题18(Java版):树的子结构

题目:输入两棵二叉树A和B,判断B是不是A的子结构。例如图中所示的两棵二叉树,由于A中有一部分子树的结构和B 是一样的,因此B是A的子结构。要查找树A中是否存在和树B结构一样的子树,我们可以分两步:第一步在树A中找到和B的根节点的值一样的结点R,第二步再判断树A中以R为根结点的子树是不是包含和树B一样的结构。以上面的两棵树为例来详细分析这个过程。首先我们试着在树A中找到值为8的

2015-08-01 22:16:45 2950

原创 剑指Offer面试题17(Java版):合并两个排序的链表

题目:输入两个递增排序的链表,合并这两个链表并使新链表中的结点仍然是按照递增排序的。例如输入图中的链表1和链表2,则合并之后的升序链表3所示。这是一个经常被各公司采用的面试题。在面试过程中,我们发现应聘者最容易犯两个错误:一是在写代码之前没有对合并的过程想清楚,最终合并出来的链表要么中间断开要么并没有递增排序;二是代码的鲁棒性方面存在问题,程序一旦有特殊的输入(如空链表)就会崩溃。接下

2015-08-01 21:28:00 4383 1

原创 剑指Offer面试题16(Java版):反转链表

题目:定义一个函数,输入一个链表的头结点,反转该链表并输出反转后链表的头结点。解决与链表相关的问题总是有大量的指针操作,而指针操作的代码总是容易出错的。很多的面试官喜欢出链表相关的问题,就是想通过指针操作来考察应聘者的编码功底。为了避免出错,我们最好先进行全面的分析。在实际软件开发周期中,设计的时间通常不会比编码的时间短。在面试的时候我们不要急于动手写代码,而是一开始仔细分析和涉及,这将会给面

2015-08-01 16:45:55 5994

原创 剑指Offer面试题15(Java版):链表中倒数第K个结点

题目: 输入一个链表,输出该链表中倒数第k哥结点。 为了符合大多数人的习惯,本题从1开始计数,即链表的尾结点是倒数第1个结点。 例如一个链表有6个结点,从头结点开始它们的值依次是1,2,3,4,5,6.这个链表的倒数第3个结点是值为4的结点为了得到第K个结点,很自然的想法是先走到链表的尾端,再从尾端回溯K步。可是我们从链表结点的定义可疑看出本题中的链表 是单向链表,单向链表的结点只有从

2015-08-01 15:28:40 3300 2

Java安全编码培训.pdf

Java开发安全编码培训

2021-04-18

springMVC json格式转换demo

此例子对应了springmvc json格式转换的小例子,其中前端请求后端的json,利用springmvc api完成的

2017-12-31

springMVCDemo+maven

spring+mvc+maven开发的springmvcdemo例子,简单实用。

2017-12-27

mybatis进行读写案例demo

mybatis读写案例demo,具体介绍了完整的配置、调用方法,运行方法等

2017-12-25

Ueditor1.4.3 for wordpress 4.0

Ueditor1.4.3 for wordpress 4.0

2016-12-21

FilterPacket流量过滤程序

关于这个程序的原理部分,可以参考我的博客http://blog.csdn.net/jsqfengbao/article/details/52462125 里面有详细的介绍。不懂的部分,大家可以随时跟帖,欢迎咨询

2016-11-30

android安全架构深究

ANDROID安全架构深究_(美)NIKOLAY ELENKOV著;刘惠明,刘跃译;(美)JON SAWYER作序;诸葛建伟审校;诸葛建伟组织翻译_北京:电子工业出版社

2016-09-05

hookUtil.cpp

可以参考我的博客,安卓hook程序

2016-08-16

eclipse颜色字体主题插件(自己编译的,多种)

eclipse颜色字体主题插件(自己编译的,多种)

2016-07-07

空空如也

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

TA关注的人

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