zoukankan      html  css  js  c++  java
  • 277. Find the Celebrity

    真心不会,想了很久,看提示是Array,仍然没有头绪,最后看的别人的做法。

    可以用directed-graph的思路来考虑。

    要求的celebrity要满足2个条件:
    1所有人都认识他
    2他不认识任何人

    另外一个很重要的条件是,只存在一个celebrity,其实一开始做不出来就是这个条件没有利用好。

    假如我们按照
    A knows B, then A ===> B
    来建立有向图。

    首先看条件2,celebrity doesnt know anyone,图里表示就是他没有到任何其余点的路径。
    我们从任何一个点开始,顺着路走,只走没走过的点,比如从0到1了,即便1有到0的路我们也不走,只看2 3 4....是否有路。

    最终会停止在一个没有out edge的点。然后重新遍历,看看是不是所有点都能到它,是不是它不能到之前的任何点就行了。。

    如果有celebrity是不会漏掉的,假如我们最终停在3上。
    按大小遍历,假如celebrity的数比3大,那我们会停在3之前,如果比3小,那么因为在3停了,说明3不认识celebrity。。

    惨,这题确实不会。
    思路看的(http://www.cnblogs.com/yrbbest/p/5034846.html)

    /* The knows API is defined in the parent class Relation.
          boolean knows(int a, int b); */
    
    public class Solution extends Relation 
    {
        
        public int findCelebrity(int n) 
        {
            int res = 0;
            for(int i = 1; i < n; i++) if(knows(res,i)) res = i;
            
            for(int i = 0; i < n; i++) 
                if(i == res) continue;
                else 
                    if(!knows(i,res)) return -1;
                    else if(knows(res,i)) return -1;
            
            
            return res;
            
            
        }
    }
    
  • 相关阅读:
    boost test学习(二)
    log4cxx的使用(2)
    Windows CE下流驱动的动态加载
    linux powerqorpp1010rdb 编译过程
    cadence allegro 设计重用
    Linux中VMware虚拟机硬盘空间扩大方法
    WINCE系统启动直接运行自己的程序
    linux6410触摸屏驱动
    cadence allegro和ad9之间的转换
    wince 6.0和5.0的区别
  • 原文地址:https://www.cnblogs.com/reboot329/p/5965861.html
Copyright © 2011-2022 走看看