今天lz去阿里的在线笔试打了一把酱油,因为lz的水平有限,时间太他么紧张了。以下把记下来的题给大家分享一下。选择题总共20道,前十题截了图,后面感觉太费时就没有再截了,凭记忆记下了两道。附加题都记录下来了。
选择题
第1题:
第2题:
第3题:
第4题
第5题:
第6题:
第7题:
第8题:
第9题:
第10题:
回顾起来的题(11-20中的某2道)
1. 一个博物馆,以每分钟20人的速度进入,平均每人待20分钟,问博物馆最少须要容纳多少人?
A.100 B.200 C.300 D.400 E.500(可能另一个以上都不是的答案,记不清楚了)
2. 有一个二叉树,(详细题目记不清楚了,主要是说有先序和中序,求后序)
问答题
第一题
给定一个query和一个text,均由小写字母组成。要求在text中找出以相同的顺序连续出如今query中的最长连续字母序列的长度。比如, query为“acbac”,text为“acaccbabb”,那么text中的“cba”为最长的连续出如今query中的字母序列,因此,返回结果应该为其长度3。请注意程序效率。(答案仅仅是考试时候的答案)
package com.wj; public class aLiTest { public static void main(String[] args) { String query ="acbac"; String text ="acaccbabb"; //调用findCLS方法计算text中最长的连续出如今query中的字母序列及其长度 findLCS(query.toCharArray(), text.toCharArray()); } public static void findLCS(char[] query, char[] text) { String result =""; //接收结果字符串 int m =query.length; int n = text.length; int[][] c = new int[m][n]; int max = 0; int maxPosX = 0; for (int i = 0; i< m; i++) { for (int j = 0;j < n; j++) { if (query[i] == text[j]) { if ((i== 0) || (j == 0)) { c[i][j] = 1; } else { c[i][j] = c[i - 1][j - 1] + 1; } if(c[i][j] > max) { max= c[i][j]; maxPosX = i; } } else { c[i][j]= 0; } } } for (int i = maxPosX- max + 1; i <= maxPosX; i++) { result +=query[i]; } System.out.println("最长序列为:" + result); //输出序列 System.out.println("最长的序列长度为:" + max); //输出序列的长度 } }
第二题
写一个函数,输入一个二叉树,树中每一个节点存放了一个整数值,函数返回这棵二叉树中相差最大的两个节点间的差值绝对值。请注意程序效率。(答案仅仅是考试时候的答案)
int absMax(BinaryTree root){ Queue<BinaryTree> btree = new Queue<BinaryTree>(); BinaryTree p = new BinaryTree(); BinaryTree q = new BinaryTree(); btree.add(root);//元素入队 int max = btree.peek().getdata();//max和min初始化 int min = btree.peek().getdata(); while(!btree.isempty()){ p = btree.poll();//元素出队 if(!p.isLChild()) //isLChild()推断左孩子是否存在,假设存在就入队列 btree.add(p.getLChild()); if(!p.isRChild()) btree.add(p.getRChild()); if(btree.isempty()){ //假设队列中不存在元素,就直接与max和min比較,然后返回 int temp = p.getdata();//取得节点的值 if(max<temp) max = temp; elseif(min > temp) min = temp; return abs(max-min); } q = btree.poll(); //队列中还存在值就出队,把孩子节点放入队列 if(!q.isLChild()) //isLChild()推断左孩子是否存在,假设存在就入队列 btree.add(q.getLChild()); if(!p.isRChild()) btree.add(q.getRChild()); if(q.getdata() >= p.getdata() ){ //先q节点的值与p节点的值比較,大值和max在比較,小的和min比較,以降低比較次数 if( max < q.getdata()) max = q.getdata(); //考试过程中因为紧张思考不严密遗漏的两行代码 if(min > p.getdata()) min = p.getdata(); } else{ if(min > q.getdata()) min = q.getdata(); //考试过程中因为紧张思考不严密遗漏的两行代码 if( max < p.getdata()) max = p.getdata(); } } } return abs(max-min);//返回max和min之差的绝对值 }
第三题
java中的wait()方法和sleep()方法的差别是什么?