阿里2015在線研發工程師筆試題(部分)
來源:程序員人生 發布時間:2014-09-27 05:17:52 閱讀次數:2455次
今天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();
}
else{
if(min > p.getdata()){
min = p.getdata();
}
}
}
return abs(max-min);//返回max和min之差的絕對值
}
第三題
java中的wait()方法和sleep()方法的區別是什么?
生活不易,碼農辛苦
如果您覺得本網站對您的學習有所幫助,可以手機掃描二維碼進行捐贈