[抄题]:

假设你和 n 个人在一个聚会中(标记为 0 到 n - 1),其中可能存在一个名人。名人的定义是所有其他 n - 1 人都认识他/她,但他/她不知道任何一个。

现在你想要找出这个名人是谁或者验证这个名人不存在。你唯一可以做的事情就是提出如下问题:“你好,A,你认识B吗?” 来获取A是否认识B。您需要通过询问尽可能少的问题(以渐近的意义)来找出名人是谁(或验证其不存在)。

你得到一个辅助函数 bool know(a,b),它会告诉你A是否知道B.实现一个函数 int findCelebrity(n),你的函数应该使 knows 的调用次数最少。

[暴力解法]:

n个人问n-1遍

时间分析:true的时候可以排除一个人,false的时候可以排除一个人。从而降低复杂度到n-1 + 1 = n

空间分析:

[思维问题]:

不知两两比较的时候是不是要用i i+1,感觉换起来很麻烦:定义一个ans,扫一遍i的过程中改变唯一的结果ans即可

[一句话思路]:

[输入量]:空: 正常情况:特大:特小:程序里处理到的特殊情况:异常情况(不合法不合理的输入):

[画图]:

[一刷]:

不知道为啥最后还要检验是不是名人:防止两人互相认识的特殊情况(要考虑到)

[二刷]:

最后检查的时候,先假设i不是ans,才能二者之间对比检验。i == ans时不要想着引入第三个变量来检验。

[三刷]:

[四刷]:

[五刷]:

[五分钟肉眼debug的结果]:

[总结]:

[复杂度]:Time complexity: O(n) Space complexity: O(1)

[英文数据结构或算法,为什么不用别的数据结构或算法]:

api函数就当一般函数,拿来就用就行

[其他解法]:

[Follow Up]:

[LC给出的题目变变变]:

[代码风格] :

/*The knows API is defined in the parent class Relation.

boolean knows(int a, int b);*/

public class Solution extendsRelation {/***@paramn a party with n people

*@returnthe celebrity's label or -1*/

public int findCelebrity(intn) {//find

int ans = 0;for (int i = 1; i < n; i++) {if (knows(ans, i) == true) {

ans=i;

}

}//check

for (int i = 0; i < n; i++) {//suppose not

if (i != ans && !knows(i, ans)) {return -1;

}if (i != ans &&knows(ans, i)) {return -1;

}

}return ans;//}

}

View Code

java名人_识别名人 · Find the Celebrity相关推荐

  1. java 设备指纹_使用Socket In(JAVA)处理生物识别指纹考勤设备

    我正在尝试使用 Java程序连接生物识别指纹考勤设备(实际上我是新手!).我使用的设备是Biocom指纹考勤系统.但是,我正在搜索和阅读有关这一点,我看到SDK可以使用哪种基于设备类型(这很难,不合逻 ...

  2. java mic波形识别_会议季Mic Drop:您不应该错过的13场Java演讲

    java mic波形识别 您的老板没有派您参加真正的会议吗? 我们为您准备了最好的讲座 九月份的一些重大事件闻名于世:秋季的第一天,甚至全国熏肉日. 这也是召开会议最忙的月份之一,一些大型Java事件 ...

  3. java人脸识别教程_用 Java 实现人脸识别功能(附源码)

    > 整理了一些Java方面的架构.面试资料(微服务.集群.分布式.中间件等),有需要的小伙伴可以关注公众号[程序员内点事],无套路自行领取 更多优选 引言 远程在家办公的第N天,快要闲出屁了,今 ...

  4. java bufferedimage颜色_基于Java BufferedImage实现识别图片中的黑色矩形

    基于Java BufferedImage实现识别图片中的黑色矩形 前言:在项目中需要实现将图片中的黑色矩形替换为其他图形,其中的难点在于图片中存在其他黑点或者黑色小方块. 实现思路: 二值化,将纯黑的 ...

  5. JAVA入门_多线程_邮局派发信件

    JAVA入门_多线程_邮局派发信件 Postman package cn.campsg.java.experiment.entity;public class Postman {private Str ...

  6. 第一段Java程序_借助Win控制命令台编译执行 编辑器Notepad++

    第一段Java程序_借助Win控制命令台编译执行 编辑器Notepad++ 准备代码: 第一次编译: 显然需要先配置环境变量: 先找到java.exe和javac.exe所在的文件夹位置: 此电脑-& ...

  7. java实现人脸识别(使用百度云V3版本)

    2017年,开发了第一个版本的人脸识别,当时费时有5天之久终于写出来了,但是只适用于火狐浏览器,别的浏览器都打不开摄像头. 2018年,将人脸识别重新完善,可以支持360.火狐.谷歌等主流浏览器,版本 ...

  8. java实现人脸识别V3版本开发

    有段时间没有写更新公众号了,也许好多人都忘记了自己还关注了这么个公众号. 因为这段时间确实是有其他的事比较忙,还有一个原因就是自己在技术方面没有学习新的东西,所以没有可更新的(包括博客) 今天,我决定 ...

  9. java 多线程写缓存,Java多线程_缓存对齐

    1.什么是缓存对齐 当前的电脑中,数据存储在磁盘上,可以断电保存,但是读取效率较低.不断电的情况下,数据可以在内存中存储,相对硬盘效率差不多是磁盘的一万倍左右.但是运算时,速度最快的是直接缓存在CPU ...

最新文章

  1. ECC加密算法入门介绍
  2. linux shell编程之菜单选择(二)
  3. 13寸笔记本电脑尺寸_2019年五款最好的13英寸笔记本电脑(windows)
  4. python seaborn 热图 值对应颜色_基于行值的seaborn热图配色方案
  5. plc控制可调节阀流程图_PLC五大主流编程语言你会几种?
  6. hibernate mysql autocommit_Hibernate4 中为什么我没有用commit()方法直接用save就存到数据库了?...
  7. Qt文档阅读笔记-QScopedPointer解析及实例
  8. 栈和队列8 - 数据结构和算法30
  9. 多行溢出文字省略号显示(HTML、CSS)
  10. mysql 4604,mysql--centos(7)安装
  11. python opencv —— 背景提取(MOG、KNN)、识别与检测(Haar Cascade)
  12. nodejs EADDRINUSE API拒绝访问
  13. Python 中把 Word 文档转换成 PDF
  14. 密码学-常见加密算法逆向学习
  15. 对C++一脸懵逼却又无比热爱的第一篇
  16. 建筑力学与结构【10】
  17. datetime取东八区时间只取到秒,返回为datetime类
  18. java jacob更新目录,jacob更新word目录
  19. pcb 受潮_硬盘SATA接口断裂及PCB板受潮_希捷 Barracuda 3TB 7200转 64MB_固态硬盘评测-中关村在线...
  20. 【Python】如何使用 Python 的 pprint库格式化和输出列表和字典

热门文章

  1. dabeicun 2013源码下载
  2. ★_当第二次检测时我的65047777
  3. 飞鸽传书为我们提供了方便的聊天工具
  4. XEIM 配置程序源代码
  5. eNet 软件发布要求多多
  6. ^_-诚征BLOG友情连接
  7. 如果你也在学python,准备要学习python,希望这篇文章对你有用。
  8. php [ext/gd/gd.lo] error 1,关于PHP一些编译安装出现的错误总结
  9. 期刊 | 人类遗传学领域期刊速览
  10. 送书《R语言数据分析和可视化》 | 这个为生信学习和生信作图打造的开源R教程真香!!!...