zoukankan      html  css  js  c++  java
  • 美团

    http://www.dy1280.com/thread-440-1-1.html

    试题是个人整理的,美团15年校招一套试题。照片版(比较清晰)上传到附件里了,大家可以下载。另外部分答案是自己从网上整理,不足地方还请多多指教,欢迎大家分享


    1、        美团有个传统,就是公司各部门每月都要组织员工进行一次团建活动(team buliding,简称TB),每个员工都可以带家属参加。活动内容除了吃喝玩乐之外,还要做些互动的游戏,需要从员工中随机选出几名组成一队来完成游戏,一次TB活动,一共有20个人(含员工和家属)参加。已知如果随机选取3位员工以及该3位员工的家属,一共有220组合。问如果每次随机选取4个员工及该4未员工的家属,会有多少组合?

    解析:数学中排列组合问题.就是从20个人中选择x个员工(家属是固定的)。x(x-1)(x-2)/(3*2)=220。求得x=12,即有12个员工,8位家属。在从12个员工中选择4个。
    (12*11*10*9)/(4*3*2)=495。

    2、有一组随机排列的字母数组,请编写一个时间复杂度为O(n)的算法,使得这些字母安装字母从小到大顺序排好。
    说明:字母区分大小写,相同的字母,排序后小写排在大写前。
    例如:R,B,B,b,W,W,B,R,B,w
    排序后:b,B,B,B,B,R,R,w,W,W
    1)描写思路(2分)
    2)请用你熟悉的编程语言编写代码实现(8分)

    思路:空间换时间,把52个字母映射为52个数字,并记录出现的次数,然后迭代输出

    1. public static void main(String[] args) { 
    2. // A=65,Z=90 a=97,z=122 
    3. char[] src = { 'R', 'B', 'B', 'b', 'W', 'W', 'B', 'R', 'B', 'w' }; 
    4. src = sortCharsOn(src); 
    5. for (char c : src) { 
    6. System.out.print(c + " "); 
    7. /** 
    8. * O(n)的时间复杂度对给定的字符数组进行排序 
    9. * @param src 
    10. * 原数组 
    11. * @return 排序后的数组 
    12. */ 
    13. private static char[] sortCharsOn(char[] src) { 
    14. int[] items = new int[54];// 用于保存52个字符 
    15. char[] des = new char[src.length]; 
    16. for (int i = 0; i < src.length; i++) { 
    17. if (src[i] < 'z' && src[i] > 'a') { // 小写对应于items中下标为偶数 
    18. items[(src[i] - 'a') * 2]++; 
    19. } else if (src[i] < 'Z' && src[i] > 'A') { // 大写对应于items中下标为奇数 
    20. items[(src[i] - 'A') * 2 + 1]++; 
    21. int index = 0; 
    22. for (int i = 0; i < items.length; i++) { 
    23. if (items[i] != 0) {// items[i],就是该字符出现的次数 
    24. if (i % 2 == 0) { 
    25. for (int j = 0; j < items[i]; j++) { 
    26. des[index++] = (char) (i / 2 + 'a');// 转化成小写 
    27. } else { 
    28. for (int j = 0; j < items[i]; j++) { 
    29. des[index++] = (char) ((i - 1) / 2 + 'A');// 转化成大写 
    30. return des; 
    复制代码

    3、给定N个磁盘,每个磁盘大小为D,i=0...N-1,现在要在这N个磁盘上"顺序分配"M个分区,每个分区大小为P[j],
    j=0....M-1,顺序分配的意思是:分配一个分区P[j]时,如果当前磁盘剩余空间足够,则在当前磁盘分配;如果不够,则
      尝试下一个磁盘,直到找到一个磁盘D[i+k]可以容纳该分区,分配下一个分区P[j+1]时,则从当前磁盘D[i+k]的剩余
      空间开始分配,不在使用D[i+k]之前磁盘末分配的空间,如果这M个分区不能在这N个磁盘完全分配,则认为分配失败,请
      实现函数,is_allocable判断给定N个磁盘(数组D)和M个分区(数组P),是否会出现分配失败的情况。
      举例:磁盘为[120,120,120],分区为[60,60,80,20,80]可分配 ,如果为[60,80,80,20,80]则分配失败


    1. public static void main(String[] args) { 
    2. int[] d = { 120, 120, 120 };// 磁盘 
    3. // int[] p = { 60, 60, 80, 20, 80 };// 分区 
    4. int[] p = { 60, 80, 80, 20, 80 };// 分区 
    5. if (is_allocable(d, p)) { 
    6. System.out.println("分配成功"); 
    7. } else { 
    8. System.out.println("分配失败"); 
    9. private static boolean is_allocable(int[] d, int[] p) { 
    10. int pindex = 0;//记录已分配的分区 
    11. boolean isAllocable = false;//用来记录是否分配成功 
    12. for (int i = 0; i < d.length; i++) {//对所有磁盘遍历 
    13. while (d[i] > 0) {//如果该磁盘还有剩余空间,就一直迭代 
    14. if (p[pindex] <= d[i]) {//如果磁盘空间足够,就分配,否则,进入下一个磁盘 
    15. d[i] -= p[pindex++]; 
    16. if (pindex == p.length) {//如果已分配的分区数跟传入的一值,意味着分配成功 
    17. isAllocable = true; 
    18. break; 
    19. } else { 
    20. break; 
    21. if (isAllocable) { 
    22. break; 
    23. return isAllocable; 
    复制代码



    4、给定正整数X,定义函数A(n)=1+x+x^2+x^3+...+x^n(n为整数且>=0),已知乘运算的时间远大于加运算,输入x,n:如何尽可能快的求出A(n)?
    要求:
    1)描述思路(2分)
    2)评估你的算法需要进行多少次乘法?(3分)
    3)请用你熟悉的编程语言编码实现(5分)

    1. public static void main(String[] args) { 
    2. Scanner s = new Scanner(System.in); 
    3. int x = s.nextInt(); 
    4. int n = s.nextInt(); 
    5. long temp = x+1; 
    6. for(int i=0;i<n-1;i++){ 
    7. temp = temp*x+1; 
    8. System.out.println(temp); 
    复制代码

    5、
    <ignore_js_op> 

    6、已知队列(Queue)支持先进先出的操作add/remobe,而栈(Stack)则支持先进后出的操作push/pop,请用两个队列实现栈先进后出的操作,希望该栈的push、pop时间复杂度尽量小。
    1)简述思路(3分)
    2)已知这两个队列的容量为M,该栈的容量是多少?(1分)
    3)假设队列的每次Add/Remove操作时间复杂度O(1),N代表存储在栈里的元素个数,请评估该栈的push/pop操作时间复杂度(1分)。
    4)写出push/pop的代码,需要考虑栈溢出(stackoverflow)的情况。(5分)


    思路:q1是专职进出栈的,q2只是个中转站。元素集中存放在一个栈中,但不是指定。
      定义两个指针:pushtmp:所指专门进栈的队列; tmp:指向临时作为中转站的另一个栈。
      入栈时:直接入pushtmp所指队列即可

    出栈时:把pushtmp的除最后一个元素外全部转移到队列tmp中,然后把刚才剩下q1中的那个元素出队列。

    参考:http://www.cnblogs.com/kaituorensheng/archive/2013/03/02/2939690.html

    7、任务调度在分布式系统中是一个很复杂很有挑战的问题,这里我们考虑一个简化的场景:假设一个中央调度机。有n个相同的任务需要调度到m台服务器上去执行。由于每台服务器的配置不一样,因此服务器执行一个任务所花费的时间也不同。现在假设第i个服务器执行一个任务需要的时间为t.
    例如:有2个执行机a,b。执行一个任务分别需要7min,10min。有6个任务待调度。如果平分这6个任务,即a,b个分3个任务,则最短需要30min执行完所有。如果a分4个任务,b分2个,则最短28min执行完。
    请设计调度算法,使得所有任务完成所需的时间最短。
    1)简述思路(2分)
    2)请用你熟悉的编程语言编码实现以下方法,输入为m台服务器,每台机器处理一个任务的时间为t,完成n个任务,输出n个任务在m台服务器的分布(8分)
    int estimate_process_time(int[]t,int吗,int n);

    8、n个元素{1,2,•••,n}有n!个不同的排列。将这n!个排列按字典序排列。并编号为0,1,•••,n!-1。每个排列的编号为其字典序的值。例如。当n=3时,其字典排序为:123,132,213,232,312,321,这六个数的字典序值分别为0,1,2,3,4,5,现给定任意n,输出字典序为k的排列(0<=k<=n!-1)。

    这是2008年ACM中一道题改编的. http://www.cnblogs.com/submarine/archive/2010/04/12/1941268.html

    9、(选做-前端) 实现一个监听load事件的接口window.load(callback):多次调用时保证执行顺序,先绑定的回调先执行:如果load事件已触发,调用时会直接执行该回调。


    10、选做-IOS)IOS系统提供了那些手势?请选择一个自己写代码实现
    UITapGestureRecognizer敲击手势(单击和双击)
     UIPanGestureRecognizer(拖动手势)
     UIPinchGestureRecognizer(缩放手势)
     UISwipeGestureRecognizer(擦碰手势)
     UIRotationGestureRecognizer(旋转手势)
     UILongPressGestureRecognizer(长按手势)

    11、
    <ignore_js_op> 

    12、(选做-运维)系统负载值(loadavg)的含义是什么?如何查看系统各项资源的使用情况?请详细说明。

    13、(选择-测试)某电商公司在做一个促销活动,促销商品共10000件,只限从手机客户端购买,每个用户&每个手机设备只限2件。商品原价M元(》10.0元),促销单价为N元(》10.0元,M>N),活动时间为9月9日上午10:00开始,18:00结束,18:00前售完展示促销商品售罄,非活动时间或促销商品售罄后或超出购买时间,均可按原价购买;商品的支付方式可为网银、代金券(面值5元,没胆只限使用2张以内),网银、代金券支付方式可任意组合;促销商品支持退货,退货时按购买金额退款,现金和/或代金券原路退回。请列出此活动的测试要点。

    14、
    <ignore_js_op> 


    转载请注明出处:http://www.dy1280.com/thread-440-1-1.html

  • 相关阅读:
    Python 命令模式和交互模式
    Python自带IDE设置字体
    Python2.7和3.7区别
    Kubernetes1.91(K8s)安装部署过程(八)-- kubernetes-dashboard安装
    Kubernetes1.91(K8s)安装部署过程(七)--coredns安装
    nginx 设置自签名证书以及设置网址http强制转https访问
    Kubernetes1.91(K8s)安装部署过程(六)--node节点部署
    VMware安装VMware tool是 遇到The path "" is not a valid path to the 3.10.0-693.el7.x86_64 kernel headers.
    第三方git pull免密码更新
    Kubernetes1.91(K8s)安装部署过程(五)--安装flannel网络插件
  • 原文地址:https://www.cnblogs.com/small-strong/p/3970737.html
Copyright © 2011-2022 走看看