java名人_识别名人 · Find the Celebrity
[抄题]:
假设你和 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相关推荐
- java 设备指纹_使用Socket In(JAVA)处理生物识别指纹考勤设备
我正在尝试使用 Java程序连接生物识别指纹考勤设备(实际上我是新手!).我使用的设备是Biocom指纹考勤系统.但是,我正在搜索和阅读有关这一点,我看到SDK可以使用哪种基于设备类型(这很难,不合逻 ...
- java mic波形识别_会议季Mic Drop:您不应该错过的13场Java演讲
java mic波形识别 您的老板没有派您参加真正的会议吗? 我们为您准备了最好的讲座 九月份的一些重大事件闻名于世:秋季的第一天,甚至全国熏肉日. 这也是召开会议最忙的月份之一,一些大型Java事件 ...
- java人脸识别教程_用 Java 实现人脸识别功能(附源码)
> 整理了一些Java方面的架构.面试资料(微服务.集群.分布式.中间件等),有需要的小伙伴可以关注公众号[程序员内点事],无套路自行领取 更多优选 引言 远程在家办公的第N天,快要闲出屁了,今 ...
- java bufferedimage颜色_基于Java BufferedImage实现识别图片中的黑色矩形
基于Java BufferedImage实现识别图片中的黑色矩形 前言:在项目中需要实现将图片中的黑色矩形替换为其他图形,其中的难点在于图片中存在其他黑点或者黑色小方块. 实现思路: 二值化,将纯黑的 ...
- JAVA入门_多线程_邮局派发信件
JAVA入门_多线程_邮局派发信件 Postman package cn.campsg.java.experiment.entity;public class Postman {private Str ...
- 第一段Java程序_借助Win控制命令台编译执行 编辑器Notepad++
第一段Java程序_借助Win控制命令台编译执行 编辑器Notepad++ 准备代码: 第一次编译: 显然需要先配置环境变量: 先找到java.exe和javac.exe所在的文件夹位置: 此电脑-& ...
- java实现人脸识别(使用百度云V3版本)
2017年,开发了第一个版本的人脸识别,当时费时有5天之久终于写出来了,但是只适用于火狐浏览器,别的浏览器都打不开摄像头. 2018年,将人脸识别重新完善,可以支持360.火狐.谷歌等主流浏览器,版本 ...
- java实现人脸识别V3版本开发
有段时间没有写更新公众号了,也许好多人都忘记了自己还关注了这么个公众号. 因为这段时间确实是有其他的事比较忙,还有一个原因就是自己在技术方面没有学习新的东西,所以没有可更新的(包括博客) 今天,我决定 ...
- java 多线程写缓存,Java多线程_缓存对齐
1.什么是缓存对齐 当前的电脑中,数据存储在磁盘上,可以断电保存,但是读取效率较低.不断电的情况下,数据可以在内存中存储,相对硬盘效率差不多是磁盘的一万倍左右.但是运算时,速度最快的是直接缓存在CPU ...
最新文章
- ECC加密算法入门介绍
- linux shell编程之菜单选择(二)
- 13寸笔记本电脑尺寸_2019年五款最好的13英寸笔记本电脑(windows)
- python seaborn 热图 值对应颜色_基于行值的seaborn热图配色方案
- plc控制可调节阀流程图_PLC五大主流编程语言你会几种?
- hibernate mysql autocommit_Hibernate4 中为什么我没有用commit()方法直接用save就存到数据库了?...
- Qt文档阅读笔记-QScopedPointer解析及实例
- 栈和队列8 - 数据结构和算法30
- 多行溢出文字省略号显示(HTML、CSS)
- mysql 4604,mysql--centos(7)安装
- python opencv —— 背景提取(MOG、KNN)、识别与检测(Haar Cascade)
- nodejs EADDRINUSE API拒绝访问
- Python 中把 Word 文档转换成 PDF
- 密码学-常见加密算法逆向学习
- 对C++一脸懵逼却又无比热爱的第一篇
- 建筑力学与结构【10】
- datetime取东八区时间只取到秒,返回为datetime类
- java jacob更新目录,jacob更新word目录
- pcb 受潮_硬盘SATA接口断裂及PCB板受潮_希捷 Barracuda 3TB 7200转 64MB_固态硬盘评测-中关村在线...
- 【Python】如何使用 Python 的 pprint库格式化和输出列表和字典
热门文章
- dabeicun 2013源码下载
- ★_当第二次检测时我的65047777
- 飞鸽传书为我们提供了方便的聊天工具
- XEIM 配置程序源代码
- eNet 软件发布要求多多
- ^_-诚征BLOG友情连接
- 如果你也在学python,准备要学习python,希望这篇文章对你有用。
- php [ext/gd/gd.lo] error 1,关于PHP一些编译安装出现的错误总结
- 期刊 | 人类遗传学领域期刊速览
- 送书《R语言数据分析和可视化》 | 这个为生信学习和生信作图打造的开源R教程真香!!!...