优酷土豆笔试题

一.选择题:
    1. A,B,O,AB血型的比例为:10%,20%,30%,40%,现在选择一批人,如果需要这批人中,至少有一个是B型血的概率不小于90%,那么至少应该选择几个人?

        A.9     B.10     C.11     D:12
        解析:题目要求,至少有一个是B型血,那么我们可以求:一个B型血也没有,假设选择x个人,则有1-0.8^x >=0.9 即求0.8^x <= 0.1 。解之得x至少为11
    2. 二分查找,假设查找的记录数为627647,最坏情况下需要查找多少次?

        A: 17   B:18     C:19     D:20
       解析:二分查找,最坏情况下,是在最后一个区间才能查找到记录数(或失败),需要的查找次数最多为ceil(logn),即取上限,
    3. 4只老鼠,A说:今晚我们都偷奶酪了 B:我只偷樱桃了。c:我没偷奶酪 D:我们之中有人没偷奶酪。它们4个只有一个是对的,问是哪一个?

        A: A    B: B     C: C     D: D
        解析:一个一个进行假设,推出悖论即可。例如,假设只有B是对的,那么B只偷了樱桃,那么推出D也是对的,与只有一个是对的矛盾,故不对。A是对的。
    4. 快速排序的平均和最坏情况下的时间复杂度是:

        A:O(n) ,O(n)  B:O(n^2),O(n^2)  C:O(nlogn),O(nlogn)  D:O(nlogn),O(n^2)
        解析:快排的性能:平均时间复杂度O(nlogn),最坏情况下的时间复杂度 O(n^2),最坏情况产生的条件:每次划分的结果都是1个元素和n-1个元素。则快速排序退化,需要的时间复杂度为O(n^2)
    5.数据库中E-R图转化为关系模型,下面错误的是?

        A.一个实体转换为一个关系模型
        B.一个关联转换为一个关系模型
        C.实体转换为关系模型时,实体的主键就是关系模型的主键
        D.关联转换为关系模型时,关系模型的主键是所有关联实体的属性及联系本身的属性。

   解析:E-R图转换为关系模型的原则有:

    (1)一个实体型转换为一个关系模式。
    关系的属性:实体型的属性。
    关系的码:实体型的码。

    (2)一个m:n联系转换为一个关系模式。
     关系的属性:与该联系相连的各实体的码以及联系本身的属性。
     关系的码:各实体码的组合。

   (3)  一个1:n联系可以转换为一个独立的关系模式,也可以与n端对应的关系模式合并  

   (4) 一个1:1联系可以转换为一个独立的关系模式,也可以与任意一端对应的关系模式合并。
    6.高度为h二叉树的二叉树的节点数最多有()个,根节点的高度为1?

        A. 2^h   B.2h    C.2^(h-1)   D.2^h - 1

      解析:满二叉树的节点数最多,最多为2^h -1个节点
    7.忘记
    8.忘记
    9. 序列 6,7,4,2,8,1,___下一个数字最有可能是几?

        A.6      B.7       C.8      D.9
     解析:观察规律:6*7 = 42    ,4*2 = 8 ,  2*8=16 则下一个数字应该为6
    10.下面的程序,while循环会执行多少次?

        unsigned char k = 20;
        while(k>=0){
            k--;
        }
        A. 20次   B.一次也不执行   C.无限循环   D.21次

    解析:注意k是unsigned char类型,也就是无符号字节型的,故k>=0始终是成立的,因而会无限循环
    11.对于一个非空二叉树。下列说法错误的是:

        A.有两个子节点的节点数一定比没有子节点的节点数少1。
        B.深度为h的二叉树节点最底层最多含有2^h个节点(根的深度度为0)
        C.根据二叉树的前序和中序遍历结果,一定可以求出后序遍历结果。
        D.堆一定是一个完全二叉树。
        解析:堆不一定按照完全二叉树组织。完全二叉树是堆的一种实现形式。
    12.下列排序需要的空间复杂度最大的是?()

        A.冒泡排序     B.快速排序    C.堆排序    D.希尔排序

       解析:冒泡排序和堆排序需要一个额外的元素来实现交换,希尔排序需要记录增量的一个变量。 快速排序的递归实现则需要一个栈空间来实现递归,平均情况下,需要O(nlgn)的额外空间  
    13. 王sir家有两个孩子, 其中一个是女孩子,请问另外一个也是女孩子的概率是()?

        A. 1/4         B.1/2         C.1/6       D.1/8    
        解析:独立事件的概率    1/2
    14.以下哪一个不属于链表优于数组的表现?()

        A.插入方便     B.删除方便    C.插入删除时不需要移动元素  D.更加节省存储空间。
        解析:由于链表需要额外的空间记录指针等,因而实际上比数组更加浪费空间(不够紧凑)
    15.以下哪一个不是单链表的特点?____

        A.插入方便
        B.删除方便
        C.可以直接访问链表的第i个元素。
        D.插入和删除时不需要移动元素。
       解析:单链表不支持随机访问,访问节点需要从头指针遍历。
    16.下列程序中,执行test()函数后的结果是:

        void test(){
            class B{
                public:
                    B(){
                        cout<<"B\t"<<endl;
                    }
                    ~B(){
                        cout<<"~B\t"<<endl;
                    }
            };
            struct C{
                C(){
                    cout<<"C\t"<<endl;
                };
                ~C(){
                    cout<<"~c\t"<<endl;
                };
            };
            struct D:B{
                D(){
                    cout<<"D\t"<<endl;
                };
                ~D(){
                    cout<<"~D\t"<<endl;
                };
                C c;   
            };
            D d;
        }
        A.   D  C  B  ~B   ~C   ~D
        B.   B  C  D  ~D   ~C   ~B
        C.   C  B  D  ~D   ~B   ~C
        D.   C  D  B  ~B   ~D   ~C    
    解析:实例化时,父类比子类先实例化。析构时,顺序相反
    17.到商店里买200的商品返还100优惠券(可以在本商店代替现金)。请问实际上折扣是多少?

        A. 75%
        B. 66.7%
        C. 60%
        D. 33.3%
        解析:相当于花费200元买到价值300元的东西,则折扣为(300-200)/300 = 33.3%
    18.const  char * const p下列的操作正确的是:

        A. p++
        B.(*p)++;
        C.*p = null;
        D.以上都不对
        解析:指针和指针所指的空间都被修饰为const,是不允许修改的      

    19.
    20.
二.填空题:

    1.冒泡排序的时间复杂度是__O(n^2)__

    2.中奖概率:3个箱子,有一个有奖,抽取一个,然后主持人打开一个空的(无奖),然后问是否更换,问下不更换抽中的一个中奖的概率是    1/2  ?,更换为另外一个箱子中奖的概率是_1/2_?

    3.高度为h的二叉树,最底层最多有__2^h__个节点,?   
    4.四个节点的二叉树共有__14__种形态?

     解析:含有n个节点的二叉树的形态的数字为卡特兰数  C(2n,n)/(n+1)
    5.下面程序的输出是?_1,3,2_
        void test(int *a,int *b){
            *a = *a + *b;
            *b = *a - *b;
            *a = *a - *b;
        }
        int a = 1,b =2,c = 3;
        test(&a,&b);
        test(&b,&c);
        test(&a,&c);
        printf("%d,%d,%d",a,b,c);

   解析:test()实现两个数交换。
    6.数组a[60][70],按照列优先存储,每个元素占据2个单元。假设a[0][0]的地址是1024.则a[32][58]的地址是:    8048__

    注意是列优先存储。
    7.对于无序数组20,18,22,19,16,21,32.将数组按照升序排列,以元素20为枢轴元素,则快速排序一趟的结果是_18,16,19,20,22,21,32__

    8.c语言中的参数传递方式有_  值__传递和_引用__传递

    9.忘记
    10.忘记
三。问答题
    1. 单向循环链表,从头开始报数,报道m或其倍数时,出列,按照出列的先后顺序从新组织单链表
       函数原型为: void convert(Node**head,int m);

         解析:约瑟夫环的形式。head为二级指针,是重新组织后的循环单链表的表头。
    2. 海量数据Top100
        a.一天的优酷视频播放量约1亿,视频总数约有100w。ID号是一个大小为20字节的字符串。如何求出当天播放视频的Top100
          可抽象为一个大文件,每行一个ID号,代表被播放的视频id。机器的内存不超过1G,如何抽取TOP100.先写思路,然后写程序。
        b.同样一个月的视频播放量约100亿。求出当月的视频播放top100,每台机器的内存不超过1G.描述所有可能的解决方案。

    解析:海量数据的处理。无法一次性装入内存,可先hash之分为多个文件处理,堆或者Trie树统计次数,求出每个文件中的Top 100。归并之求出总的top 100

  对于第二问:还可以hadoop mapReduce处理之。
    3. 1-n中找缺失的数字,有n-1个数字,每一个都位于1-n之间,但是之中缺失了一个数字,要求找出这个缺失的数字,线性时间复杂度

解析:异或。原理:相同的数异或为0,0与其他数异或结果为该数。

posted @ 2012-11-12 20:57  Mr.Rico  阅读(349)  评论(0编辑  收藏  举报