发布于 2014-10-22 21:56:44 | 192 次阅读 | 评论: 0 | 来源: 网友投递

这里有新鲜出炉的精品教程,程序狗速度看过来!

阿里巴巴

阿里巴巴(中国电子商务公司) 即 阿里巴巴集团 。 阿里巴巴集团经营多元化的互联网业务,致力为全球所有人创造便捷的交易渠道。自成立以来,阿里巴巴集团建立了领先的消费者电子商务、网上支付、B2B网上交易市场及云计算业务,近几年更积极开拓无线应用、手机操作系统和互联网电视等领域。


第三部分

25、某二叉树的前序遍历序列为-+a*b-cd/ef,后序遍历序列为abcd-*+ef/-,问其中序遍历序列是——。

答案:a+b*c-d-e/f

26、某缓存系统采用LRU淘汰算法,假定缓存容量为4,并且初始为空,那么在顺序访问以下数据项的时候1,5,1,3,2,4,1,2出现缓存命中的次数是——。最后缓存中即将准备淘汰的数据项是——。

答案:3,3

解释:(LRU是Least Recently Used 近期最少使用算法。)1-》1,5-》5,1-》5,1,3-》5,1,3,2-》1,3,2,4-》3,2,4,1-》3,4,1,2-》

首先1调入内存,然后5调入内存,然后1调入内存(命中缓存),然后3调入内存,然后2调入内存,然后4调入内存(将最少使用的5置换出内存),然后1调入内存(命中缓存),然后2调入内存(命中缓存)。最后,最少使用的3将面临被置换出的危险。

27、两个较长的单向链表a和b,为了找出及诶单noed满足node in a并且node in b。请设计空间使用尽量小的算法(用c/c++,java 或者伪代码)

struct node    

{    

    int v;    

    node *next;    

};    

/*   

返回链表的长度   

链表为空 返回0   

*/    

size_t listLen(node * p)    

{    

    size_t num = 0;    

    while (p!=NULL)    

    {    

        num++;    

        p = p->next;    

    }    

    return num;    

}    

// 如果找到了 则返回指针 指向公共节点    

// 如果不存在 则返回空指针    

node * findFirstCommenNode(node * pheada, node * pheadb)    

{    

    size_t lenA = listLen(pheada);    

    size_t lenB = listLen(pheadb);    

     

    node * plistA = pheada;    

    node * plistB = pheadb;    

    //调整长度    

    //plistA 指向较长的一个    

    if (lenA < lenB)    

    {    

        plistB = pheada;    

        plistA = pheadb;    

        size_t t = lenA;    

        lenA = lenB;    

        lenB = t;    

    }    

    while(lenA > lenB)    

    {    

        plistA = plistA->next;    

        --lenA;    

    }    

    //一样长了    

    //寻找公共节点    

    while (plistA!=NULL && plistA != plistB)    

    {    

        plistA = plistA->next;    

        plistB = plistB->next;    

    }    

    return plistA;    

}    


算法的空间复杂度O(1),时间复杂度O(m+n)。

28、当存储数据量超出单节点数据管理能力的时候,可以采用的办法有数据库sharding的解决方案,也就是按照一定的规律把数据分散存储在多个数据管理节点N中(节点编号为0,1,2,,,,N-1)。假设存储的数据时a  请完成为数据a计算存储节点的程序。

#define N 5  

int hash(int element){  

   return element*2654435761;  

}  

int shardingIndex(int a){  

    int p = hash(a);  

    _________________________; //这里是空格  

    return p;  

}  

答案:p%=N
29、宿舍内5个同学一起玩对战游戏。每场比赛有一些人作为红方,另一些人作为蓝方。请问至少需要多少场比赛,才能使任意两个人之间有一场红方对蓝方和蓝方对红方的比赛?

答案:4场,分别是AB-CDE、ACD-BE、BCE-AD、DE-ABC



最新网友评论  共有(0)条评论 发布评论 返回顶部

Copyright © 2007-2017 PHPERZ.COM All Rights Reserved   冀ICP备14009818号  版权声明  广告服务