程序员面试金典第5版
午后小夕
趁着青春,尽情挥洒,加油
展开
-
有向图中两个结点之间是否存在一条路径
给定有向图,设计一个算法,找出两个结点之间是否存在一条路径public enum State{Unvisited,Visited,Visiting;}public static boolean search(Graph g,Node start ,NLinkedList{//当作队列使用LinkedList q=new LinkedList();for原创 2015-08-22 19:47:28 · 6654 阅读 · 0 评论 -
给定有序数组,创建高度最小的二叉查找树
TreeNode createMinimalBST(int arr[], int start, int end){if (end {return null;}int mid = start + (end - start) / 2;TreeNode n=new TreeNode(arr[mid]);n.left=createMinimalBST(arr,start,m原创 2015-08-22 19:59:26 · 1081 阅读 · 0 评论 -
给定一棵二叉树,创建含有某一深度上所有结点的链表
题目:给定一棵二叉树,设计一个算法,创建含有某一深度上所有结点的链表(比如:若一棵树的深度为D,则会创建出D个链表)解法:可以用任意的方式遍历整棵树,只要记住结点位于哪一层即可。 可用将前序遍历算法稍作修改,将level+1传入下一个递归调用。下面是使用深度优先搜索的实现代码。void createlLinkedList(TreeNode root,Arr原创 2015-08-22 20:38:46 · 1592 阅读 · 0 评论 -
检查一棵二叉树是否为二叉查找树
题目:实现一个函数,检查一棵二叉树是否为二叉查找树。public static int index=0;public static copyBST(TreeNode root,int [] array){if(root== null) return ;copyBST(root.left,array);array[index]=root.data;index++;原创 2015-08-22 21:13:33 · 2232 阅读 · 0 评论 -
判断一棵树是否是另一棵树的子树
bool containsTree(TreeNode t1, TreeNode t2){if (t2 == NULL)//空树一定是子树{return true;} return subTree(t1,t2);}bool matchTree(TreeNode r1, TreeNode r2){if (r2 == NULL && r1 == NULL)//若原创 2015-08-24 15:36:47 · 3528 阅读 · 0 评论 -
找出二叉树中某两个结点的第一个公共祖先
设计一个算法,找出二叉树中某两个结点的第一个公共祖先.。不得将额外的结点存储在另外的数据结构中。注意:这不一定是二叉查找树。/**若p为root的子孙,则返回true*/boolean covers(TreeNode root,TreeNode p){if(root==null) return false;if(root== p) return true;r原创 2015-08-22 22:04:38 · 582 阅读 · 0 评论 -
将一个数插入到另一个数中指定位置处
int updateBits(int n, int m, int i, int j){/*创建掩码,用来清除n中i到j的位,示例:i=2,j=4.掩码为11100011*/int allOnes = ~0;//等同于一连串的1//在位置j之前的位均为1,其余为0,left=11100000int left = allOnes //在位置i之后的位均为1,right=原创 2015-08-24 17:18:31 · 917 阅读 · 0 评论 -
打印一个0到1之间的数的二进制表示
public static String printBinary(double num) { if(num>=1||num return "ERROR"; StringBuilder binary=new StringBuilder(); binary.append("."); while(num>0) { /* *设定长队上限,32个字符 */原创 2015-08-24 20:20:27 · 1124 阅读 · 0 评论 -
找出二进制表示中1的个数相同,且大小最接近的那两个数
public int getNext(int n){/*计算c0和c1*/int c=n;int c0=0;int c1=0;while(((c&1)==0) && (c!=0)){c0++;c>>=1;}while((c&1)==1){c1++;c>>=1;}/** 错误:若n==1111....1111000....0原创 2015-08-24 21:33:58 · 3001 阅读 · 0 评论 -
解释(n&(n-1))==0的具体含义
解释代码(n&(n-1))==0的具体含义.n那么(n&(n-1))==0究竟表示什么?原创 2015-08-24 21:35:41 · 4329 阅读 · 1 评论 -
需要改变几位,才能将整数A转成整数B
原创 2015-08-24 21:42:59 · 470 阅读 · 0 评论 -
交换某数的奇数位和偶数位
原创 2015-08-24 21:48:01 · 450 阅读 · 0 评论 -
数组中存放0到n中的缺少一个数的连续数,找出该缺少的数
public int findMissing(ArrayList array){/*bit 0对应于LSB.以此为起点,逐步向较高的位推进*/return findMissing(array,0);}public int findMissing(ArrayList input,int column){if(column>=BitInteger.INTEGER_S原创 2015-08-24 22:22:48 · 2483 阅读 · 0 评论 -
打印结点和等于某个值的所有路径
public void findSum(TreeNode node,int sum,int []path){if(node==null){return ;}/*将当前结点插入路径*/path[level]=node.data;/*查找以此为终止且总和为sum的路径*/int t=0;for(int i=level;i>=0;i--){t+=pa原创 2015-08-24 16:04:42 · 720 阅读 · 0 评论 -
求两点之间的水平线
原创 2015-08-25 20:32:58 · 1101 阅读 · 0 评论 -
天平秤药丸
原创 2015-08-25 20:38:34 · 632 阅读 · 0 评论 -
蚂蚁碰撞概率
原创 2015-08-25 22:14:25 · 696 阅读 · 0 评论 -
给定直角坐标系上的两条线,确定这两条线会不会相交
public class Line{static double epsilon=0.000001;public double slope;public double yintercept;public Line(double s,double y){slope=s;yintercept=y;}public boolean intersect(Line lin原创 2015-08-26 14:55:49 · 832 阅读 · 0 评论 -
找出将两个正方形对半分的线
原创 2015-08-26 15:44:28 · 709 阅读 · 0 评论 -
在二维平面上,有一些点。请找出经过点数最多的那条线
Line findBestLine(GraphPoint[] points) { Line bestLine =null; int bestCount=0; HashMap> linesBySlope= new HashMap>(); for(int i=0;i { for(int j=i+1;j { Line line=new Line(points[i原创 2015-08-26 16:37:30 · 1252 阅读 · 0 评论 -
小岛上的蓝眼睛的人要几天才能全部离开
原创 2015-08-25 20:59:06 · 1589 阅读 · 0 评论 -
扔鸡蛋,在第N层及N层以上会摔破,N层以下不会破。求N
原创 2015-08-25 21:17:13 · 576 阅读 · 0 评论 -
投篮,当投篮率为多少时,选择玩法1或者玩法2
原创 2015-08-25 21:33:08 · 648 阅读 · 0 评论 -
覆盖棋盘上的方格
原创 2015-08-25 20:44:27 · 381 阅读 · 0 评论 -
柜子开关,经过第i轮的开关切换,柜子开着的还剩几个
原创 2015-08-25 21:27:55 · 685 阅读 · 0 评论 -
实现整数的乘法,减法和除法运算。只允许使用加号
public static int negate(int a) { int neg=0; int d=a while(a!=0) { neg+=d; a+=d; } return neg; }//两数相减相当于对b取反,然后将两数相加 public static int minus(i原创 2015-08-26 15:18:25 · 1259 阅读 · 0 评论 -
用两个不规则容器倒出指定容量的水
原创 2015-08-25 20:47:33 · 1215 阅读 · 0 评论 -
设计呼叫中心的类
public class CallHandler{private static CallHandler instance;/*三个员工层级:接线员,主管,经理*/private final int LEVELS=3;/*起始设定10位接线员,4位主管和2位经理*/private final int NUM_RESPONDENTS=10;private f原创 2015-08-26 22:16:12 · 1100 阅读 · 0 评论 -
运用面向对象原则,设计一款音乐点唱机
原创 2015-08-27 18:23:07 · 515 阅读 · 0 评论 -
实现一个拼图算法和数据结构
原创 2015-08-27 20:23:23 · 1011 阅读 · 0 评论 -
奥赛罗琪--大框设计
原创 2015-08-27 21:20:33 · 682 阅读 · 0 评论 -
有些数的素因子只有3,5,7.请设计一个算法,找出其中第k个数
public static int removeMin(Queue q){int min=q.peek();for(Integer v:q){if(min>v)min=v;}while(q.contains(min)){q.remove(min);}return min;}public static void addProducts(Que原创 2015-08-26 17:41:03 · 19029 阅读 · 0 评论 -
设计一个聊天服务器
原创 2015-08-27 21:00:53 · 1194 阅读 · 0 评论 -
设计并实现一个散列表,使用链表(即链表)处理碰撞冲突
原创 2015-08-27 21:56:32 · 1238 阅读 · 0 评论 -
生成素数序列----埃拉托斯特尼筛法
下面是埃拉托斯特尼筛法的实现代码:boolean[] sieveOfEratosthenes(int max){boolean[] flags = new boolean[max + 1];int count = 0;init(flags);//将flags中0,1元素除外的所有元素设为trueint prime = 2;while (prime {//划掉余下原创 2015-08-13 21:45:07 · 935 阅读 · 0 评论 -
小孩有多少种上楼梯的方式
原创 2015-08-28 15:51:35 · 769 阅读 · 0 评论 -
机器人从(0,0)到(x,y)有多少种走法
public boolean getPath(int x,int y,ArrayList path) { Point p=new Point(x,y); path.add(p); if(x==0 && y==0) { return true;//找到一条路径 } boolean success=false; if(x>=1 && isFree原创 2015-08-28 16:26:37 · 2744 阅读 · 0 评论 -
在数组A中找出一个魔术索引
public static int magicSlow(int[] array) { for(int i=0;i { if(array[i]==i) { return i; } } return -1; } public static int magicFast(int [] array,int start,int end) {i原创 2015-08-28 17:29:46 · 641 阅读 · 0 评论 -
请设计用于通用扑克牌的数据结构。并说明你会如何创建该数据结构的子类。实现“二十一点”游戏
原创 2015-08-26 21:39:44 · 1214 阅读 · 0 评论 -
内存文件系统的数据结构和算法
原创 2015-08-27 21:31:50 · 843 阅读 · 0 评论