【LeetCode - 277】搜寻名人
文章目录
- 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】搜寻名人相关推荐
- LeetCode 277. 搜寻名人(思维题)
文章目录 1. 题目 2. 解题 2.1 暴力解 2.2 高效解 1. 题目 假设你是一个专业的狗仔,参加了一个 n 人派对,其中每个人被从 0 到 n - 1 标号. 在这个派对人群当中可能存在一位 ...
- 力扣(LeetCode)277. 搜寻名人(2022.10.04)
假设你是一个专业的狗仔,参加了一个 n 人派对,其中每个人被从 0 到 n - 1 标号.在这个派对人群当中可能存在一位 "名人".所谓 "名人" 的定义是:其 ...
- 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 ...
- LeetCode-Python-277. 搜寻名人
假设你是一个专业的狗仔,参加了一个 n 人派对,其中每个人被从 0 到 n - 1 标号.在这个派对人群当中可能存在一位 "名人".所谓 "名人" 的定义是:其 ...
- leetcode刷题目录总结
题目 题目 技巧 相似的题目 其他 1. 无序数组中找出目标为target的两个数 先定义下一个数,然后找两位的数是否存在 高频, 大厂刷题班, 第27节 2.逆序链表两数相加 链表.各位加法 高频, ...
- Leetcode题目分类指南(单独刷题或学习算法书籍配合使用)
Leetcode题目分类指南 笔者在学习<算法导论>同时,希望能够配合Leetcode的题目进行分类模块化练习,该分类为笔者自己根据做题学习经验,结合<算法导论>的内容,给出L ...
- 请看这里!!!leetcode题目目录!!!
leetcode题目目录 面试题1 25人赛跑问题-得出前三名 面试题2 求二叉树每一层最右节点值 面试题3 除留余数法实现哈希表 面试题4 一个优雅的三路快排 面试题5 图的知识点补 ...
- LeetCode 700题 题解答案集合 Python
2019.5.12更新至题号796,目前共有265题. 2019.5.26更新至题号72, 目前共有347题. 2019.6.16更新至题号70,目前共有382题. 2019.7.7更新至题号5120 ...
- 贪心(Greedy Algorithm)
贪心(Greedy Algorithm) 贪心 44.通配符匹配 45.跳跃游戏 II 55.跳跃游戏 122.买卖股票的最佳时机II 134.加油站 135.分发糖果 179.最大数 277.搜寻名 ...
最新文章
- 正则 -12至+14 闭区间,小数位只能是(0.25,0.5,0.50,0.75,0.0,0.00) 前面的正负符号可选...
- html表单上传图片获取路径,asp.net获取HTML表单File中的路径的方法
- 【Python】疫情卷土重来?Python可视化带你追踪疫情的最新动态
- php errorcode,php中pdo错误处理方法详解
- [Ubuntu] Simple way to pass passwords on a shell script
- sklearn 中的 Pipeline 机制
- 【转载】html中object标签详解
- Spark RDD概念学习系列之Pair RDD的分区控制
- css matrix矩阵,矩阵 | matrix() (Transforms) - CSS 中文开发手册 - Break易站
- 两个卡巴斯基 6.0 官方简体中文版授权文件
- 分子克隆有哪些最新发表的毕业论文呢?
- 257套工业机器人SW设计3D图纸 焊接机械手/发那科ABB安川臂模型
- java中cbrt_JavaScript中带有示例的Math.cbrt()方法
- 西门子plc与oracle报文,西门子PLC以太网 通讯协议 解析
- 坐标系转换--椭球面多项式拟合公式转换模型变换关系理解
- 物联网毕设 -- 基于STM32的心率检测
- 英语单词(持续更新)
- 打开计算机网络自动连接怎么回事,win10系统电脑连接宽带后会自动打开Bing网页怎么办...
- 宣传折页设计三折页宣传册(案例分享)(版权归redtrans所有,请勿私用)
- Study JavaScript《JS操作SVG的一些知识》