zoukankan      html  css  js  c++  java
  • 每天一道逻辑思维题

    1、有N个人,其中一个明星和n-1个群众,群众都认识明星,明星不认识任何群众,群众和群众之间的认识关系不知道,现在如果你是机器人R2T2,你每次问一个人是否认识另外一个人的代价为O(1),试设计一种算法找出明星,并给出时间复杂度(没有复杂度不得分)。(2013年阿里巴巴暑期实习招聘笔试题)

    算法1:明星不认识任何人
    i不认识剩余的所有人,则i为明星,否则i不是明星,舍弃i.算法复杂度O(n*n)

    for i=[0,n-1){
       flag=false; //标识i是否认识其他人,如果有认识的人则标识为true
       for j=[1,n){
           if(i认识j){
    	      flag=true;
    	      break;
    	   }//end if
       }//end for
       
       //判断i是否有认识的人
       if(flag==false)
          return i;    //如果i在剩余的人中没有认识的人,则为明星
    }//end for

    算法2: 关键点在只有一个明星。首先分析一次询问的效果,询问一次有2种结果:
    1)A认识B->A不是明星,B可能是明星
    2)A不认识B->A可能是明星,B不是明星
    所有不管是上述哪种结果,都可以确定一个人不是明星,所以要确定明星, 时间复杂度为O(n)。

    代码1:
    数据结构设计:因为每次判断可以舍弃那个不是明星的人,所以可以用栈或队列出栈或出队列来舍弃那个没用的元素,因此,可以用栈或队列来存储初始化的元素。

    //判断结果,result中存储每次判断可能是明星的那个人,当栈中所有元素出栈完毕,则result中为明星那个人
    result=0; //i=0,初始化
    //初始化栈,入栈
    for i=[1,n) {
      stack.push(i);
    }//end for
    
    
    while(!stack.isEmpty()){
        temp=stack.pop(); //出栈
    	//判断结果
    	if(temp 认识 result) //result可能是明星
    	  result=result;
    	else                 //temp 不认识 result,则temp可能是明星
    	  result=temp;  
    }//end while

    2、n*m矩阵中有多少个长方形? (2013年微软暑假实习)
    n排列*m排列,(1+2+...+n)(1+2...+m)

    3、n长度的字符串有多少个子字符串
    分析:如abcdef,以a开头的有n个子字符串,以b开头的有n-1个子字符串,....,所以共有n+(n-1)+...+1

    4、战报交流:战场上不同的位置有N个战士(n>4),每个战士知道当前的一些战况,现在需要这n个战士通过通话交流,互相传达自己知道的战况信息,每次通话,可以让通话的双方知道对方的所有情报,设计算法,使用最少的通话次数,是的战场上的n个士兵知道所有的战况信息,不需要写程序代码,得出最少的通话次数。(2013年阿里巴巴暑期实习招聘笔试题)
    问题描述:设士兵i和j拥有的信息分别为a[i]和a[j](0<=i<n,0<=j<n),则i和j交换信息后各自的信息都翻倍了,信息量变为a[i]+a[j]。现在求最小交换次数,使得每个人最后得到总信息量sum(a[0]+a[1+...+a[n-1]])
    算法1:基于中间消息人传递的模型(可以先把所有消息集中于一个或几个人,然后再由这些消息汇总人把消息传给所有人)
    第1到第N-1个人,将知道的消息都告诉第N个人,需要N-1次。这时,第N个人有了所有人的消息,然后他将拥有的消息分别都告诉剩余的N-1个人。所以需要(N-1)+(N-1)=2N-2。

    5、1条直接将区域分为2部分,2条直线将区域分为4部分,n条直线将区域分为几部分?假设不存在三条直线相较于一点的情况。(微软2013暑期实习笔试题)

    分析见《编程之美》光影切割问题,这里写出结论:

    根据递推可以得出,如果总共有N条直线,M个交点,那么区域的数目为N+M+1。



  • 相关阅读:
    [Tutorial] Using the RasPi as a WiFi hostspot
    Turn Your Raspberry Pi Into a WiFi Hotspot with Edimax Nano USB EW-7811Un (RTL8188CUS chipset)
    RPI-Wireless-Hotspot
    将树莓派Raspberry Pi设置为无线路由器(WiFi热点AP,RTL8188CUS芯片)
    java的动态代理机制详解
    ant -verbose -debug ...
    各个版本的spring jar包
    挑战树莓派:谁才是Geek最爱的开发板?
    RPi Debian Auto Login
    IP查找工具——angry IP Scanner
  • 原文地址:https://www.cnblogs.com/aukle/p/3230744.html
Copyright © 2011-2022 走看看