LintCode领扣算法问题答案:645. 识别名人
发布日期:2021-06-30 17:13:35 浏览次数:2 分类:技术文章

本文共 1558 字,大约阅读时间需要 5 分钟。

645. 识别名人

描述

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

现在你想要找出这个名人是谁或者验证这个名人不存在。你唯一可以做的事情就是提出如下问题:“你好,A,你认识B吗?” 来获取A是否认识B。您需要通过询问尽可能少的问题(以渐近的意义)来找出名人是谁(或验证其不存在)。
你得到一个辅助函数 bool know(a,b),它会告诉你A是否知道B.实现一个函数 int findCelebrity(n),你的函数应该使 knows 的调用次数最少。

  • 如果在这个聚会中有名人, 那么有且只有一个。如果有名人在聚会中则返回名人的标签,如果没有名人,返回 -1。

样例 1:

输入:	2 // 接下来n*(n-1)行	0 knows 1	1 does not know 0输出: 	1解释:	所有人都认识1,而且1不认识其他人。

样例 2:

输入:	3 // 接下来n*(n-1)行	0 does not know 1	0 does not know 2	1 knows 0	1 does not know 2	2 knows 0	2 knows 1输出:	0解释:	所有人都认识0,而且0不认识其他人。	0不认识1,同时1认识0。	2认识所有人,但是1不认识2。


文章目录


题解

/* 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) {
// Write your code here for (int i = 0; i < n; i++) {
boolean ok = true; for (int j = 0; j < n; j++) {
if (i == j) {
continue; } if (knows(i, j)) {
ok = false; break; } if (!knows(j, i)) {
ok = false; break; } } if (ok) {
return i; } } return -1; }}

最后说两句

非常感谢你阅读本文章,如果你觉得本文对你有所帮助,请留下你的足迹,点个赞,留个言,多谢~

作者水平有限,如果文章内容有不准确的地方,请指正。

希望小伙伴们都能每天进步一点点。

声明

本文由博客原创,转载请注明来源,谢谢~

转载地址:https://le-yi.blog.csdn.net/article/details/114825299 如侵犯您的版权,请留言回复原文章的地址,我们会给您删除此文章,给您带来不便请您谅解!

上一篇:【精】LintCode领扣算法问题答案:648. 单词缩写集
下一篇:【精】LintCode领扣算法问题答案:677. 大岛的数量

发表评论

最新留言

关注你微信了!
[***.104.42.241]2024年04月07日 16时27分25秒