假设你是一个专业的狗仔,参加了一个 n 人派对,其中每个人被从 0 到 n - 1 标号。在这个派对人群当中可能存在一位 “名人”。所谓 “名人” 的定义是:其他所有 n - 1 个人都认识他/她,而他/她并不认识其他任何人。

现在你想要确认这个 “名人” 是谁,或者确定这里没有 “名人”。而你唯一能做的就是问诸如 “A 你好呀,请问你认不认识 B呀?” 的问题,以确定 A 是否认识 B。你需要在(渐近意义上)尽可能少的问题内来确定这位 “名人” 是谁(或者确定这里没有 “名人”)。

在本题中,你可以使用辅助函数 bool knows(a, b) 获取到 A 是否认识 B。请你来实现一个函数 int findCelebrity(n)。

派对最多只会有一个 “名人” 参加。若 “名人” 存在,请返回他/她的编号;若 “名人” 不存在,请返回 -1。

示例 1:

输入: graph = [
  [1,1,0],
  [0,1,0],
  [1,1,1]
]
输出: 1
解析: 有编号分别为 0、1 和 2 的三个人。graph[i][j] = 1 代表编号为 i 的人认识编号为 j 的人,而 graph[i][j] = 0 则代表编号为 i 的人不认识编号为 j 的人。“名人” 是编号 1 的人,因为 0 和 2 均认识他/她,但 1 不认识任何人。
示例 2:

输入: graph = [
  [1,0,1],
  [1,1,0],
  [0,1,1]
]
输出: -1
解析: 没有 “名人”

注意:

该有向图是以邻接矩阵的形式给出的,是一个 n × n 的矩阵, a[i][j] = 1 代表 i 与 j 认识,a[i][j] = 0 则代表 i 与 j 不认识。
请记住,您是无法直接访问邻接矩阵的。

来源:力扣(LeetCode)
链接:https://leetcode-cn.com/problems/find-the-celebrity
著作权归领扣网络所有。商业转载请联系官方授权,非商业转载请注明出处。

第一种思路:

双重循环的解非常好想,但是会超时……

第二种思路:

我们可以先试着找到一个可能的名人,

然后再判断这个可能的名人到底是不是真实的名人。

class Solution(object):def findCelebrity(self, n):""":type n: int:rtype: int"""celebrity = 0for i in range(1, n):if knows(celebrity, i):#说明当前的这个celebrity肯定不是名人,因为他认识别的人celebrity = i# 到这里的 celebrity,必定不认识 [celebrity + 1, n - 1]的所有人for i in range(celebrity):if knows(celebrity, i): # 为了确保celebrity 不认识 [0, celebrity - 1]return -1for i in range(n):if not knows(i, celebrity): # 为了确保 每个人都认识 celebrityreturn -1return celebrity

LeetCode-Python-277. 搜寻名人相关推荐

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

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

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

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

  3. leetcode第277题名流问题(谷歌面试题)

    leetcode第277题名流问题(谷歌面试题) 一点小小的感受: 看到这个题的时候,一拍脑瓜子,想的就是双层for循环,去找那唯一的一个名人,(也是我这个菜鸟唯一能想到的解题方式) /*** @au ...

  4. Leetcode python《热题 HOT 100》15. 三数之和

    Leetcode python 之 <热题 HOT 100>:https://leetcode-cn.com/problemset/hot-100/ 15. 三数之和 给定一个包含 n 个 ...

  5. Leetcode python《热题 HOT 100》1. 两数之和

    Leetcode python 之 <热题 HOT 100>:https://leetcode-cn.com/problemset/hot-100/ 1. 两数之和 给定一个整数数组 nu ...

  6. LeetCode Python实现 二叉树简单部分

    LeetCode Python实现 二叉树简单部分 ''' 1 二叉树的最大深度 给定一个二叉树,找出其最大深度.二叉树的深度为根节点到最远叶子节点的最长路径上的节点数.说明: 叶子节点是指没有子节点 ...

  7. LeetCode Python实现 链表简单部分

    LeetCode Python实现 链表简单部分 我以前完全没有写过关于链表的东西,node.val=node.next.val#当前值被后一个值覆盖node.next=node.next.next# ...

  8. python寻峰,[LeetCode][Python]162. 寻找峰值

    [LeetCode][Python]162. 寻找峰值 峰值元素是指其值大于左右相邻值的元素. 给定一个输入数组 nums,其中 nums[i] ≠ nums[i+1],找到峰值元素并返回其索引. 数 ...

  9. LEETCODE | PYTHON | 剑指 Offer 58 - Ⅱ | 左旋转字符串

    LEETCODE | PYTHON | 剑指 Offer 58 - Ⅱ | 左旋转字符串 1. 题目 字符串的左旋转操作是把字符串前面的若干个字符转移到字符串的尾部.请定义一个函数实现字符串左旋转操作 ...

  10. LEETCODE | PYTHON | 724 | 寻找数组的中心下标

    LEETCODE | PYTHON | 724 | 寻找数组的中心下标 1. 题目 给你一个整数数组 nums ,请计算数组的 中心下标 . 数组 中心下标 是数组的一个下标,其左侧所有元素相加的和等 ...

最新文章

  1. Spring Cloud应用开发(一:使用Eureka注册服务)
  2. 优化内核报错及解决方法
  3. 为什么 Python被Google选为TensorFlow的开发语言呢?使用 Python比C++语言进行机器学习有什么优势?
  4. 关于浮点数在计算机内存中的存储
  5. Mysql 监控小脚本
  6. Java IO: 其他字符流(下)
  7. 7-6 计算符号函数的值 (10 分)
  8. 不使用第三个变量的情况下,实现两个变量间的互换。
  9. 我的大学十年——林锐
  10. 全面|机房精密空调设计,看完你就明白了
  11. 渝粤题库 陕西师范大学 《教育科学研究方法》作业
  12. c语言运算优先级口诀简单,C语言运算符优先级口诀
  13. Linux ping 命令
  14. 基于Foolnltk的《三体》文本命名实体分析
  15. 电烙铁焊锡到底有没有毒?
  16. (转载)HCIA-GaussDB 华为认证数据库工程师
  17. python孩子 哪里学_Python知识免费学!孩子提高逻辑思维,这样练就够了!
  18. 增加matlab内存大小,matlab扩大内存的方法
  19. 按键消抖+点亮led灯
  20. 微信接口验证类php,微信公众平台消息接口校验与消息接口响应实例

热门文章

  1. PAT (Advanced Level) Practice 1053 Path of Equal Weight (30 分)
  2. 移动宽带内网穿透教程,快解析nat版快速实现
  3. Intellij IDEA 占满CPU
  4. 炸裂!AI 都快把《西部世界》搞出来了!
  5. 我的奇思妙想机器人消防员_我的奇思妙想未来的机器人作文600字
  6. 10个免费在线网站测速工具
  7. 关于 数据对接入库失败后的 补录机制的一些想法
  8. python反转一个整数、123变成321,python反转一个三位整数的多种实现方案
  9. foss测试_FOSS – Java开发人员的最好朋友
  10. Android蓝牙播放如何显示歌曲信息?