zoukankan      html  css  js  c++  java
  • 阿里笔试题:在n个人中找明星

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

    ----------------------------------------------------------------------------

    一种思路:取出两个人,如1号和2号,如果1号认识2号,那么1号不是明星,去除1号;如果1号不认识2号,那么2号不是明星,去除2号。如此比下去,遍历一遍,即可找出明星(剩下的那个)。时间复杂度O(n)。

    用两个指针i和j分别指向前、后的两个人,比较一次根据比较结果做一次位置调整。

    bool isRecgn(int i,int j);  //判断i是否认识j
    
    //n个人中找明星 n>1
    int find(int a[],int n)
    {
        int i=0,j=1;
        int cand = i;
        while(j<n)
        {
            if(isRecgn(i,j)){
                cand = j;
                i = j;
                if(++j>n)
                    break;
            }
            else{
                cand = i;
                if(++j>n)
                    break;
            }
        }
        return cand;
    }
    

      

  • 相关阅读:
    python修改镜像源
    nginx 记录
    linux 常用命令
    修改ssh连上默认目录
    sqlplus 导出一张表数据
    推送kafka消息失败
    Mybatis generator配置
    Oracle导库
    docker -- 安装mysql8.0.16
    安装自动集成工具jenkins
  • 原文地址:https://www.cnblogs.com/dreamysmurf/p/3945129.html
Copyright © 2011-2022 走看看