阿里2015在线研发工程师笔试题(部分)

今天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()方法的区别是什么?








  • 3
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 2
    评论
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值