文章目录

  • 1、题目描述
  • 2、解题思路
  • 3、解题代码

1、题目描述

2、解题思路

  解题的关键信息在于名人的定义:

  名人的要求:

  1、其他人都认识名人
  2、名人不认识其他所有人。

  先假设 0 号是名人,celebrity = 0,于是遍历 1 到 n-1 。

  如果 knosw(celebrity,1) == false,说明 celebrity 暂时符合 “他不认识其他所有人”;

  如果遍历到编号 i 的时候出现 knosw(celebrity,1) == true,则破坏了 “他不认识其他所有人” 的要求,需要重新选定 celebrity = i。

  你可能回问,为什么不是 celebrity = 1,即从下一个人开始呢?

  因为我们既然能遍历到 i,说明 j = [1, i-1] 中都是 knosw(celebrity,j) == false 的,即编号 0 不认识编号 1 到 i-1 的人,不符合 “其他人都认识名人” 的要求。

  因此,更新 celebrity = i,因为,i 起码有 0 认识他,暂时符合“其他人都认识名人”的规定。

  当遍历完所有的人,此时的 celebrity 还不能确定是名人,因为现在只知道当前的 celebrity 符合以下要求:

  1、编号 0 认识它;

  2、它不认识 i+1 到 n-1 的所有人。

  因此只需要最终检验一下即可,遍历一遍所有人,如果出现:knows(celebrity, i) == true 或者 knows(i, celebrity) == false,说明这个名人是假的,返回 -1.

  如果验证完毕没有返回 -1,说明真的是名人。

3、解题代码

/* 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 celebrity = 0;  // 先假定 0 就是名人for (int i = 1; i < n; i++) {// knows(celebrity, i) 为 false,说明 celebrity 可能是名人if (knows(celebrity, i)) {// celebrity 认识 i,celebrity 肯定不是名人,i 可能是名人celebrity = i;}}// 检验一下这个 celebrity 是否真的是名人for (int i = 0; i < n; i++) {if (celebrity == i) continue;if (knows(celebrity, i) || !knows(i, celebrity)) {return -1;}}return celebrity;}
}

【LeetCode - 277】搜寻名人相关推荐

  1. LeetCode 277. 搜寻名人(思维题)

    文章目录 1. 题目 2. 解题 2.1 暴力解 2.2 高效解 1. 题目 假设你是一个专业的狗仔,参加了一个 n 人派对,其中每个人被从 0 到 n - 1 标号. 在这个派对人群当中可能存在一位 ...

  2. 力扣(LeetCode)277. 搜寻名人(2022.10.04)

    假设你是一个专业的狗仔,参加了一个 n 人派对,其中每个人被从 0 到 n - 1 标号.在这个派对人群当中可能存在一位 "名人".所谓 "名人" 的定义是:其 ...

  3. python领域的名人_名人问题 算法解析与Python 实现 O(n) 复杂度 (以Leetcode 277. Find the Celebrity为例)...

    1. 题目描述 Problem Description Leetcode 277. Find the Celebrity Suppose you are at a party with n peopl ...

  4. LeetCode-Python-277. 搜寻名人

    假设你是一个专业的狗仔,参加了一个 n 人派对,其中每个人被从 0 到 n - 1 标号.在这个派对人群当中可能存在一位 "名人".所谓 "名人" 的定义是:其 ...

  5. leetcode刷题目录总结

    题目 题目 技巧 相似的题目 其他 1. 无序数组中找出目标为target的两个数 先定义下一个数,然后找两位的数是否存在 高频, 大厂刷题班, 第27节 2.逆序链表两数相加 链表.各位加法 高频, ...

  6. Leetcode题目分类指南(单独刷题或学习算法书籍配合使用)

    Leetcode题目分类指南 笔者在学习<算法导论>同时,希望能够配合Leetcode的题目进行分类模块化练习,该分类为笔者自己根据做题学习经验,结合<算法导论>的内容,给出L ...

  7. 请看这里!!!leetcode题目目录!!!

    leetcode题目目录 面试题1 25人赛跑问题-得出前三名   面试题2 求二叉树每一层最右节点值   面试题3 除留余数法实现哈希表   面试题4 一个优雅的三路快排   面试题5 图的知识点补 ...

  8. LeetCode 700题 题解答案集合 Python

    2019.5.12更新至题号796,目前共有265题. 2019.5.26更新至题号72, 目前共有347题. 2019.6.16更新至题号70,目前共有382题. 2019.7.7更新至题号5120 ...

  9. 贪心(Greedy Algorithm)

    贪心(Greedy Algorithm) 贪心 44.通配符匹配 45.跳跃游戏 II 55.跳跃游戏 122.买卖股票的最佳时机II 134.加油站 135.分发糖果 179.最大数 277.搜寻名 ...

最新文章

  1. 正则 -12至+14 闭区间,小数位只能是(0.25,0.5,0.50,0.75,0.0,0.00) 前面的正负符号可选...
  2. html表单上传图片获取路径,asp.net获取HTML表单File中的路径的方法
  3. 【Python】疫情卷土重来?Python可视化带你追踪疫情的最新动态
  4. php errorcode,php中pdo错误处理方法详解
  5. [Ubuntu] Simple way to pass passwords on a shell script
  6. sklearn 中的 Pipeline 机制
  7. 【转载】html中object标签详解
  8. Spark RDD概念学习系列之Pair RDD的分区控制
  9. css matrix矩阵,矩阵 | matrix() (Transforms) - CSS 中文开发手册 - Break易站
  10. 两个卡巴斯基 6.0 官方简体中文版授权文件
  11. 分子克隆有哪些最新发表的毕业论文呢?
  12. 257套工业机器人SW设计3D图纸 焊接机械手/发那科ABB安川臂模型
  13. java中cbrt_JavaScript中带有示例的Math.cbrt()方法
  14. 西门子plc与oracle报文,西门子PLC以太网 通讯协议 解析
  15. 坐标系转换--椭球面多项式拟合公式转换模型变换关系理解
  16. 物联网毕设 -- 基于STM32的心率检测
  17. 英语单词(持续更新)
  18. 打开计算机网络自动连接怎么回事,win10系统电脑连接宽带后会自动打开Bing网页怎么办...
  19. 宣传折页设计三折页宣传册(案例分享)(版权归redtrans所有,请勿私用)
  20. Study JavaScript《JS操作SVG的一些知识》

热门文章

  1. 成双成对的数,怎么找到落单的那个
  2. vue中实现Excel导入导出功能
  3. word中新建的标题编号与上一级的标题编号没有顺承的一种解决方法
  4. 画论86 松年《颐园论画》
  5. 弘辽科技:淘宝宝贝访问量低该如何解决?影响访问量低的原因有?
  6. Java XML转换为JSON XML解析 转换为JSON Java 实现JSON转换为XML json转xml
  7. 在线JSONPath解析器
  8. unity3d 切换场景过度动画
  9. 浙江省地勘测绘类职称评审的一般路线-整理时间20201106
  10. 多个Excel根据两个同指标进行合并查询,处理。