- 博客(53)
- 收藏
- 关注
原创 程序员面试题精选100题(60)-判断二叉树是不是平衡的
题目:输入一棵二叉树的根结点,判断该树是不是平衡二叉树。如果某二叉树中任意结点的左右子树的深度相差不超过1,那么它就是一棵平衡二叉树。[code] int getHeight(Node node){ if(node==null){ return 0; } int heigth = 1; if(node.left!=null){ ...
2011-07-24 15:33:48 112
原创 程序员面试题精选100题(58)-八皇后问题
题目:在8×8的国际象棋上摆放八个皇后,使其不能相互攻击,即任意两个皇后不得处在同一行、同一列或者同一对角斜线上。下图中的每个黑色格子表示一个皇后,这就是一种符合条件的摆放方法。请求出总共有多少种摆法。[img]http://dl.iteye.com/upload/picture/pic/94902/133043c3-9957-3c21-a5e0-4bf77c4d3f44.jpg[/img...
2011-07-24 12:22:48 121
原创 程序员面试题精选100题(57)-O(n)时间的排序
题目:某公司有几万名员工,请完成一个时间复杂度为O(n)的算法对该公司员工的年龄作排序,可使用O(1)的辅助空间。由于年龄总共只有几十种可能,我们可以很方便地统计出每一个年龄里有多少名员工。举个简单的例子,假设总共有5个员工,他们的年龄分别是25、24、26、24、25。我们统计出他们的年龄,24岁的有两个,25岁的也有两个,26岁的一个。那么我们根据年龄排序的结果就是:24、24、25、...
2011-07-24 12:02:26 97
原创 程序员面试题精选100题(55)-不用+、-、×、÷数字运算符做加法
题目:写一个函数,求两个整数的之和,要求在函数体内不得使用+、-、×、÷。 用位运算:1.使用半加运算,计算出不进位相加的结果 2.只有两个1在一起才会进位,那么确定哪些位置有两个1,然后移位,再进行不进位相加;循环进行不进位相加。。。。。[code]int addWithoutArithmetic(int num1, int num2){...
2011-07-24 11:15:02 196
原创 程序员面试题精选100题(51)-顺时针打印矩阵
题目:输入一个矩阵,按照从外向里以顺时针的顺序依次打印出每一个数字例如:如果输入如下矩阵:1 2 3 45 6 7 89 10 11 1213...
2011-07-24 09:35:27 82
原创 程序员面试题精选100题(50)-树为另一树的子结构
题目:二叉树的结点定义如下:struct TreeNode{ int m_nValue; TreeNode* m_pLeft; TreeNode* m_pRight;};输入两棵二叉树A和B,判断树B是不是A的子结构。例如,下图中的两棵树A和B,由于A中有一部分子树的结构和B是一样的,因此B就是A的子结构。...
2011-07-23 20:24:21 87
原创 程序员面试题精选100题(49)-复杂链表的复制
题目:有一个复杂链表,其结点除了有一个m_pNext指针指向下一个结点外,还有一个m_pSibling指向链表中的任一结点或者NULL。其结点的C++定义如下: struct ComplexNode{ int m_nValue; ComplexNode* m_pNext; ComplexNode* m_pSibling;};...
2011-07-23 19:49:11 103
原创 程序员面试题精选100题(48)-二叉树两个结点的最低共同父结点
题目:二叉树的结点定义如下:struct TreeNode{ int m_nvalue; TreeNode* m_pLeft; TreeNode* m_pRight;};输入二叉树中的两个结点,输出这两个结点在数中最低的共同父结点。分析:求数中两个结点的最低共同结点是面试中经常出现的一个问题。这个问题至少有两个变种。第一变种是二叉树...
2011-07-21 19:17:52 139
原创 程序员面试题精选100题(47)-数组中出现次数超过一半的数字
题目:数组中有一个数字出现的次数超过了数组长度的一半,找出这个数字。太简单了。。。。HashMap key=数, value=次数
2011-07-21 18:56:44 95
原创 程序员面试题精选100题(46)-对称子字符串的最大长度
题目:输入一个字符串,输出该字符串中对称的子字符串的最大长度。比如输入字符串“google”,由于该字符串里最长的对称子字符串是“goog”,因此输出4。思路,把每个都看成是对称中心,然后向外扩展。。[code]int GetLongestSymmetricalLength_2(char* pString){ if(pString == NULL) ...
2011-07-21 18:46:08 280
原创 程序员面试题精选100题(44)-数值的整数次方
题目:实现函数double Power(double base, int exponent),求base的exponent次方。不需要考虑溢出。 不明白就看这个网址:http://zhedahht.blog.163.com/blog/static/254111742009101563242535/如何将指数分解为一个或若干个2的整数次方。我们把指数表示为二进制数再来分析。比如6...
2011-07-19 22:22:13 74
原创 程序员面试题精选100题(43)-n个骰子的点数
题目:把n个骰子扔在地上,所有骰子朝上一面的点数之和为S。输入n,打印出S的所有可能的值出现的概率。用一个HashMap,把所有计算的和都存进去,如果出现多次,那么对应的value++;那么我们就可以知道每个值到此出现了多少次;可以使用递归来做[code]Map p = new HashMap();public void getCount(int n,int he){ ...
2011-07-19 20:02:20 293
原创 程序员面试题精选100题(42)-旋转数组的最小元素
题目:把一个数组最开始的若干个元素搬到数组的末尾,我们称之为数组的旋转。输入一个排好序的数组的一个旋转,输出旋转数组的最小元素。例如数组{3, 4, 5, 1, 2}为{1, 2, 3, 4, 5}的一个旋转,该数组的最小值为1。不说了。。...
2011-07-19 18:56:44 86
原创 svn命令
svn命令 通常都有帮助,可通过如下方式查询:$ svn help知道了子命令,但是不知道子命令的用法,还可以查询:$ svn help add开发人员常用命令(1) 导入项目$ cd ~/project$ mkdir -p svntest/{trunk,branches,tags}$ svn import svntest https://l...
2011-07-18 19:34:38 79
原创 程序员面试题精选100题(41)-把数组排成最小的数
题目:输入一个正整数数组,将它们连接起来排成一个数,输出能排出的所有数字中最小的一个。例如输入数组{32, 321},则输出这两个能排成的最小数字32132。请给出解决问题的算法,并证明该算法。这个题目就是把数组排序而已,排序规则是先比较第一位,第一位小的在前面,第一位相同则比较第二位,。。如果没有这个位,则视为0...
2011-07-17 23:35:38 93
原创 程序员面试题精选100题(38)-输出1到最大的N位数
题目:输入数字n,按顺序输出从1最大的n位10进制数。比如输入3,则输出1、2、3一直到最大的3位数即999。此题考的是内存溢出问题的解决方案000 ,001,002,...010...,999[code]char[] num = new char[n]; for(int i=0;i...
2011-07-17 22:49:18 163
原创 程序员面试题精选100题(37)-寻找丑数
题目:我们把只包含因子2、3和5的数称作丑数(Ugly Number)。例如6、8都是丑数,但14不是,因为它包含因子7。习惯上我们把1当做是第一个丑数。求按从小到大的顺序的第1500个丑数。 思路:只计算丑数,而不在非丑数的整数上花费时间。根据丑数的定义,丑数应该是另一个丑数乘以2、3或者5的结果(1除外)。因此我们可以创建一个数组,里面的数字是排好序的丑数。里面的每一个丑数是前面的...
2011-07-17 22:15:03 152
原创 程序员面试题精选100题(36)-在字符串中删除特定的字符
题目:输入两个字符串,从第一字符串中删除第二个字符串中所有的字符。例如,输入”They are students.”和”aeiou”,则删除之后的第一个字符串变成”Thy r stdnts.”。事实上,我们并不需要在每次删除一个字符的时候都去移动后面所有的字符。我们可以设想,当一个字符需要被删除的时候,我们把它所占的位置让它后面的字符来填补,也就相当于这个字符被删除了。在具体实现中,我们可...
2011-07-17 21:17:08 149
原创 程序员面试题精选100题(35)-找出两个链表的第一个公共结点
题目:两个单向链表,找出它们的第一个公共结点。两个链表如果不一样长,就造成他们一样长,然后再同步前进,前进一次比较一次即可先让长的那个链表先往前走,然后再同步向前...
2011-07-17 20:32:12 76
原创 程序员面试题精选100题(34)-找出数组中两个只出现一次的数字
题目:一个整型数组里除了两个数字之外,其他的数字都出现了两次。请写程序找出这两个只出现一次的数字。要求时间复杂度是O(n),空间复杂度是O(1)。因为空间复杂度是1.。。。。不能用HashMap异或运算的性质:任何一个数字异或它自己都等于0简单版本:一个数组里除了一个数字之外,其他的数字都出现了两次。请写程序找出这个只出现一次的数字有了上面简单问题的解决方案之后,我...
2011-07-15 19:49:44 484
原创 程序员面试题精选100题(33)-在O(1)时间删除链表结点
题目:给定链表的头指针和一个结点指针,在O(1)时间删除该结点。链表结点的定义如下:struct ListNode{ int m_nKey; ListNode* m_pNext;};时间复杂度为1,说明不能遍历节点那么我们删除这个结点可以理解为删除这个结点的内容,那么把下一个结点的内容拷贝给此结点,然后删除此结点即可。。。...
2011-07-15 19:39:29 83
原创 程序员面试题精选100题(32)-不能被继承的类
题目:用java设计一个不能被继承的类。两种途径:1. 定义final的类2.用private的构造器。。。然后用工厂方法,其实工厂类就是不能被继承的
2011-07-15 19:21:24 154
原创 程序员面试题精选100题(31)-从尾到头输出链表
题目:输入一个链表的头结点,从尾到头反过来输出每个结点的值。把链表遍历的放入一个栈中,因为是先放入的后出来,所以可以达到目的,但是需要维护栈;等效的做法,使用递归。public void print(Node node){ if(node.child!=null){ print(node.child); } System.out.pr...
2011-07-15 19:13:02 81
原创 程序员面试题精选100题(28)-字符串的排列
题目:输入一个字符串,打印出该字符串中字符的所有排列。例如输入字符串abc,则输出由字符a、b、c所能排列出来的所有字符串abc、acb、bac、bca、cab和cba。前一个分别于后面的每一个都交换一次[code]char[] arr = new char[]{'a','b','c'};List list = new ArrayList();public void g...
2011-07-14 16:43:22 114
原创 程序员面试题精选100题(27)-二元树的深
题目:输入一棵二元树的根结点,求该树的深度。从根结点到叶结点依次经过的结点(含根、叶结点)形成树的一条路径,最长路径的长度为树的深度。例如:输入二元树: 10 / \ ...
2011-07-14 16:40:50 122
原创 程序员面试题精选100题(26)-和为n连续正数序
题目:输入一个正数n,输出所有和为n连续正数序列。例如输入15,由于1+2+3+4+5=4+5+6=7+8=15,所以输出3个连续序列1-5、4-6和7-8。这个题目是第10题的升级版。。。第十题为:在排序数组中查找和为给定值的两个数字,只要输出一个就可以;--两头开始这个是需要输出多个,但是是输出连续的。。。因为是连续的,所以不能从两头开始,只能从一头开始这个...
2011-07-14 16:24:11 87
原创 程序员面试题精选100题(24)-栈的push、pop序列
题目:输入两个整数序列。其中一个序列表示栈的push顺序,判断另一个序列有没有可能是对应的pop顺序。为了简单起见,我们假设push序列的任意两个整数都是不相等的。 比如输入的push序列是1、2、3、4、5,那么4、5、3、2、1就有可能是一个pop系列。因为可以有如下的push和pop序列:push 1,push 2,push 3,push 4,pop,push 5,pop,po...
2011-07-12 19:38:41 257
原创 程序员面试题精选100题(22)-整数的二进制表示中1的个数
题目:输入一个整数,求该整数的二进制表达中有多少个1。例如输入10,由于其二进制表示为1010,有两个1,因此输出2。一个很基本的想法是,我们先判断整数的最右边一位是不是1。接着把整数右移一位,原来处于右边第二位的数字现在被移到第一位了,再判断是不是1。这样每次移动一位,直到这个整数变成0为止。现在的问题变成怎样判断一个整数的最右边一位是不是1了。很简单,如果它和整数1作与运算。由于1除了...
2011-07-12 19:00:03 97
原创 程序员面试题精选100题(21)-左旋转字符串
题目:定义字符串的左旋转操作:把字符串前面的若干个字符移动到字符串的尾部。如把字符串abcdef左旋转2位得到字符串cdefab。请实现字符串左旋转的函数。要求时间对长度为n的字符串操作的复杂度为O(n),辅助内存为O(1)。把一个字符串逆序,空间复杂度是1, 我们还是把字符串看成有两段组成的,记位XY。左旋转相当于要把字符串XY变成YX。我们先在字符串上定义一种翻转的操作,就是翻...
2011-07-12 16:37:22 88
原创 程序员面试题精选100题(20)-最长公共子串
这个题目待研究。。。题目:如果字符串一的所有字符按其在字符串中的顺序出现在另外一个字符串二中,则字符串一称之为字符串二的子串。注意,并不要求子串(字符串一)的字符必须连续出现在字符串二中。请编写一个函数,输入两个字符串,求它们的最长公共子串,并打印出最长公共子串。例如:输入两个字符串BDCABA和ABCBDAB,字符串BCBA和BDAB都是是它们的最长公共子串,则输出它们的长度4,...
2011-07-12 15:42:29 103
原创 程序员面试题精选100题(19)-反转链表
题目:输入一个链表的头结点,反转该链表,并返回反转后链表的头结点。链表结点定义如下:struct ListNode{ int m_nKey; ListNode* m_pNext;};这个easy....不说了...
2011-07-12 15:35:43 73
原创 程序员面试题精选100题(18)-用两个栈实现队列
用两个栈实现队列说说思路把:向stack1中放数据,放完后,如果想取出来,先导导stack2中,这么做其实就是相当于给这一串数换一个开口方向而已,所以拿就从stack2中拿就可以了,push是往stack1中push,pop总是找stack2,如果stack2中没了,就问stack1要。。。。就这么简单...
2011-07-12 15:30:23 56
原创 程序员面试题精选100题(17)-把字符串转换成整数
题目:输入一个表示整数的字符串,把该字符串转换成整数并输出。例如输入字符串"345",则输出整数345。在java中,这个题目。。霍霍不过为了满足面试官,还是先把String 转换成char[] 或者直接输入char[]...
2011-07-12 15:17:36 125
原创 程序员面试题精选100题(16)-O(logn)求Fibonacci数列
题目:定义Fibonacci数列如下: / 0 n=0f(n)= 1 n=1 \ f(n-1)+f(n-2) n=2输入n,用最快的方法求该数列的第n项。分析:在很多C语言教科书中讲到递归函数的时候,都会用Fibonacci...
2011-07-12 15:02:25 73
原创 程序员面试题精选100题(14)-圆圈中最后剩下的数字
题目:n个数字(0,1,…,n-1)形成一个圆圈,从数字0开始,每次从这个圆圈中删除第m个数字(第一个为当前数字本身,第二个为当前数字的下一个数字)。当一个数字删除后,从被删除数字的下一个继续删除第m个数字。求出在这个圆圈中剩下的最后一个数字。思路:最初有0,1,2,3...m-1,m,m+1,m+2...n-1这么多个数,第一次以后变成了0,1,2,3...m-1 ,m+1,m+2....
2011-07-11 23:02:13 120
原创 程序员面试题精选100题(13)-第一个只出现一次的字符
题目:在一个字符串中找到第一个只出现一次的字符。如输入abaccdeff,则输出b。思路:第一个==》我们需要一个有序表, 第一次==》我们需要计算次数[code]LinkedHashMap map= new LinkedHashMap; public void a(String[] arr){ for(int i=0;i...
2011-07-11 22:58:54 90
原创 程序员面试题精选100题(12)-从上往下遍历二元树
题目:输入一颗二元树,从上往下按层打印树的每个结点,同一层中按照从左往右的顺序打印。 例如输入 8 / \ 6 10 /\ /\ 5 7 9 11输出8 6 10 5 7 9 11。思路: 使用入队的操作即可[code]/////////////////////////...
2011-07-11 22:46:16 80
原创 题目:输入一颗二元查找树,将该树转换为它的镜像,即在转换后的二元查找树中,左子树的结点都大于右子树的结点。用递归和循环两种方法完成树的镜像转换。...
题目:输入一颗二元查找树,将该树转换为它的镜像,即在转换后的二元查找树中,左子树的结点都大于右子树的结点。用递归和循环两种方法完成树的镜像转换。 例如输入: 8 / \ 6 10 /\ /\5 7 9 11输出: 8 / \ 10 6 /\ /\11 ...
2011-07-11 22:27:15 203
原创 j2se----Java异步socket
用异步输入输出流编写Socket进程通信程序 在Merlin中加入了用于实现异步输入输出机制的应用程序接口包:java.nio(新的输入输出包,定义了很多基本类型缓冲(Buffer)),java.nio.channels(通道及选择器等,用于异步输入输出),java.nio.charset(字符的编码解码)。通道(Channel)首先在选择器(Selector)中注册自己感兴趣的事件,当相应的...
2011-07-11 17:10:27 87
空空如也
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人