识别名人 · 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 extends Relation {
/**
* @param n a party with n people
* @return the celebrity's label or -1
*/
public int findCelebrity(int n) {
//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;//
}
}
识别名人 · Find the Celebrity的更多相关文章
- [Swift]LeetCode277. 寻找名人 $ Find the Celebrity
Suppose you are at a party with n people (labeled from 0 to n - 1) and among them, there may exist o ...
- Learning Face Age Progression: A Pyramid Architecture of GANs-1-实现人脸老化
Learning Face Age Progression: A Pyramid Architecture of GANs Abstract 人脸年龄发展有着两个重要的需求,即老化准确性和身份持久性, ...
- Azure 认知服务 (2) 计算机视觉API - 分析图像
<Windows Azure Platform 系列文章目录> 在上一节内容中,笔者介绍了微软认知服务的概览. 在本节中,笔者将详细介绍微软认知服务中的一种:计算机视觉 (Computer ...
- 一些图像识别初创公司产品及API搜集ing...
一些公司的产品路线可以很好地给我们启示,欢迎看客补充. 一.微软认知服务API 1.年龄.性别检测 2.物体分类.识别 3.识别名人 全新的名人识别模块可以识别20万来自全球各地涉及商界.政界.体育界 ...
- Swift LeetCode 目录 | Catalog
请点击页面左上角 -> Fork me on Github 或直接访问本项目Github地址:LeetCode Solution by Swift 说明:题目中含有$符号则为付费题目. 如 ...
- 英语每日阅读---8、VOA慢速英语(翻译+字幕+讲解):脸肓症患者记不住别人的脸
英语每日阅读---8.VOA慢速英语(翻译+字幕+讲解):脸肓症患者记不住别人的脸 一.总结 一句话总结: a.neural abnormalities are more widespread:Duc ...
- Azure 认知服务--计算机视觉 API - 分析图像
在本节中,笔者将详细介绍 Azure 认知服务中的一种:计算机视觉 (Computer Vision) API. 我的一个客户有需求,他们需要消费者与自己的产品合照,然后上传到服务器并转发到朋友圈. ...
- Seeing AI:计算机视觉十年磨一剑,打造盲人的“瑞士军刀”
Mary Bellard(左)和AnneTaylor(右)是Seeing AI开发团队的成员,SeeingAI成果的背后是计算机视觉数十年研究的支持. 当Anne Taylor走进一个房间时,她像其 ...
- [LeetCode] Find the Celebrity 寻找名人
Suppose you are at a party with n people (labeled from 0 to n - 1) and among them, there may exist o ...
随机推荐
- [UE4]C++ 动态内存分配(6种情况,好几个例子)
1.堆内存分配 : C/C++定义了4个内存区间: 代码区,全局变量与静态变量区,局部变量区即栈区,动态存储区,即堆(heap)区或自由存储区(free store). 堆的概念: 通常定义变量(或对 ...
- FDD vs TDD
双工方式 FDD vs TDD 频分双工(FDD) 收发信各占用一个频率. 优点是收.发信号同时进行,时延小,技术成熟,缺点是设备成本高. 时分双工(TDD) 收发信使用同一个频率,但使用不同 ...
- maven快速入门之安装
maven是基于项目对象模型(pom) 可以通过y一小段描述信息来管理项目的构建,报告,和文档的软件项目管理工具. 覆盖编译,测试运行清理构建周期,提供仓库的概念,统一帮助管理项目. 下载:http: ...
- [Python] Scipy and Numpy(1)
import numpy as np #Create an array of 1*10^7 elements arr = np.arange(1e7) #Converting ndarray to l ...
- 修改IP
查看系统版本 [root@host ~]# cat /etc/issueCentOS release 6.5 (Final)Kernel \r on an \m [root@host ~]# cat ...
- JPA和Hibernate到底是什么关系???
转自:https://www.cnblogs.com/mosoner/p/9494250.html 在学习框架的过程中,发现学的东西很多,但是感觉他们之间的联系区别都不是很了解,知道JPA可以去实现持 ...
- IOS HTTP访问端口
Project dyld_sim raised exception class ENetHTTPClientException with message 'Error -1022 accessing ...
- Ping ip能ping通,ping计算机名ping不通,网络共享不能访问
名称 协议 端口 NetBIOS Name Service UDP 137 NetBIOS Datagram Service UDP 138 NetBIOS Session Service TCP 1 ...
- Oracle12c部署
部署环境业务系统与数据库服务部署在一台服务器上了 电脑是台式机没有网络,也没有插网线,需要先建立一个网络回环,然后进行Oracle12c的安装,安装过程中系统会默认勾选创建为容器数据库,需要把这个勾选 ...
- WINFORM小列子参考
1.用树型列表动态显示菜单 密码:zx9t 二.Popup窗口提醒(桌面右下角出现) 密码:cjjo 三.台历 密码:nq4m 四.文件复制 密码:lsqj 五.进度条 密码:byti 六 ...