阿里巴巴2011届实习生招聘笔试题及分析

完整试题:

http://wenku.baidu.com/link?url=nDQF-fN7J9lMHN3V6PWDXYVNfW53LcAXlL4wXV2Ads1oNeMJuSkX3s-9wzxRpt42Y3BDdfG0ICkyl4FQgi88qz_IVnL0AOkKzbnnJzwMMhy

參考:http://blog.csdn.net/wangran51/article/details/8876234

以下的【分析】是我给出的。

阿里巴巴2011届实习生招聘笔试题

公共题

选择题(每题5分)

1. 若一棵二叉树具有10个度为2的结点,则该二叉树的度为0的结点个数是(     

A9    B11    C12    D:不确定 

2.下列排序算法中,其时间复杂度和记录的初始排列无关的是(     

A:插入排序    B:堆排序    C:高速排序  D:冒泡排序 

3.已知中序遍历的序列为abcdef,高度最小的可能的二叉树的叶子是(    

Aace      Bacf        Cadf       Dcdf 

4.參加百年阿里培训的n位同学结伴去西湖旁边为游人指路,两人一组,他们打算先让体重之和恰好为102公斤的同学一组,请给出一个算法找到这种组合,或者确定他们中不存在这种组合,当中最优的算法时间复杂度为?(如果体重均为整数)    

AO(log(n))    BO(n)     CO(n log(n))   DO(n^2)

【分析】经典问题,数组中随意两个数的和等于给定数。

5.众所周知数据结构中很主要的树结构包含二叉查找树(BST)。当我们把例如以下序列:105194137631按顺序建立一棵BST时,树的最大深度是?(令根节点深度为0,运行不进行平衡的基本插入)    

A5    B   C3    D

6.阿里巴巴启用了新的办公大厦,这里的一切都充满了现代感;project师们打算在娱乐区用大小相等的圆形材料切割出一些空间,使用A,B,C三个圆形材料,最多能够将空间分为八个区域(包含圆形以外的区域),假设给你五个圆形材料,你最多能够帮助project师们分出多少个空间?    

A20    B22      C26    D32 

【分析】:3个圆:把空间分为8各区域,图例如以下,圆中有7个区域,加上圆外的区域,共8个。

4个圆:随意两圆都相交且随意三圆不交于同一点时分平面的部分数最多,第四个圆被前三个圆分成六段圆弧,每一段圆弧将原来所在平面区域又分成两部分,所以添加了6个部分,三个圆最多能将平面分成8+6个=14个部分;

5个圆:随意两圆都相交且随意三圆不交于同一点时分平面的部分数最多,第五个圆被前四个圆分成八段圆弧,每一段圆弧将原来所在平面区域又分成两部分,所以添加了8个部分,三个圆最多能将平面分成14+8=22个部分.

通项公式:F(n)=F(n-1)+2*(n-1),n2F(1)=2

JAVA部分

选择题(每题5分)

1、 有例如以下一段代码,请选择其执行结果:(       ) 

public classTest {

    private static final String MESSAGE ="taobao";

    public static void main(String[] args) {

        // TODO Auto-generated method stub

        Stringa = "tao" + "bao";

        Stringb = "tao";

        Stringc = "bao";

        System.out.println(a ==MESSAGE);

        System.out.println((b +c) == MESSAGE);

    }

}

A true true     B false false     C true false   D false true 

【分析】:a和MESSAGE引用同一个对象,而(b + c)不是一个对象。

2、 下面哪几种方式可用来实现线程间通知和唤醒:(       ) 

A Object.wait/notify/notifyAll         B ReentrantLock.wait/notify/notifyAll 

C Condition.await/signal/signalAll       D Thread.wait/notify/notifyAll 

3、 下面集合对象中哪几个是线程安全的?(       )

A  ArrayList      B  Vector     C  Hashtable     D  Stack 

【分析】:ArrayList是线程不安全的,轻量级的,Vector是线程安全的,重量级的,stack继承自Vector。   
4、 有下面一段代码,请选择其执行结果。(       ) 

public classSpike {

    public static void main(String[] args) {

        Countera = new Counter();

        System.out.println(a.increment());

        System.out.println(a.anotherIncrement());

        Counterb = new Counter();

        System.out.println(b.increment());

    }

}

 

class Counter {

    private static int count = 0;

 

    public int increment() {

        returncount++;

    }

 

    public int anotherIncrement() {

        return ++count;

    }

}

 A: 1 1 1          B: 1 2 3         C: 0 2 2            D 0 2 0

综合题(每题15分)

1 分析MergeSort的原理以及算法复杂度,并用最擅长的编程语言实现MergeSort

2)给定一个数t,以及n个整数,在这n个数中找到加和为t的全部组合,比如t = 4, n = 6,这6个数为 [4, 3, 2, 2, 1, 1],这样输出就有4个不同的组合它们的加和为4:4, 3+1, 2+2, and 2+1+1.  请设计一个高效算法实现这个需求。

【分析】:经典的“子集和问题”,用回溯法求解,我还在学习中。

C&C++部分(略)

原文地址:https://www.cnblogs.com/mengfanrong/p/4006868.html