LeetCode.997-找到镇法官(Find the Town Judge)

IEC104协议下的文件传输与软件升级的技术细节与操作流程 本文深入探讨IEC104协议下的文件传输过程和软件升级机制,揭示其背后的技术细节和操作流程。 阅读详情

这是悦乐书的第373次更新,第400篇原创

01 看题和准备

今天介绍的是LeetCode算法题中Easy级别的第234题(顺位题号是997)。在一个城镇,有N个人从1到N标记。有传言说其中一个人是秘密的镇法官。

如果镇法官存在,那么:

  • 镇法官不信任任何人。

  • 每个人(镇法官除外)都信任镇法官。

  • 只有一个人满足前两条。

给定一个trust数组,一对trust[i] = [a,b]表示被标记为a的人信任标记为b的人。

如果镇法官存在并且可以识别,则返回镇法官的标签。否则,返回-1。

例如:

输入:N = 2,trust = [[1,2]]
输出:2

输入:N = 3,trust = [[1,3],[2,3]]
输出:3

输入:N = 3,trust = [[1,3],[2,3],[3,1]]
输出:-1

输入:N = 3,trust = [[1,2],[2,3]]
输出:-1

输入:N = 4,trust = [[1,3],[1,4],[2,3],[2,4],[4,3]]
输出:3

注意:

  • 1 <= N <= 1000

  • trust.length <= 10000

  • trust[i]都是不同的。

  • trust[i][0] != trust[i][1]

  • 1 <= trust[i][0],trust[i][1] <= N

02 第一种解法

将题目翻译一下就是,法官的被信任次数等于N-1,并且法官不能信任其他人,即法官是trust数组中trust[i][1]出现次数等于N-1的人(被信任次数等于N-1),并且trust[i][0]不等于法官所在的标签(法官不能信任其他人)。

思路:利用HashMap记录被信任人出现的次数,找出其中被信任了N-1次的人,然后去trust数组中判断此人是否有信任过其他人。有种特殊情况是N为1的时候,trust为空数组,即只有1个人,那么这个人就是法官。

public int findJudge(int N, int[][] trust) {
    // 只有1个人的时候,法官就是他本人
    if (N == 1) {
        return N;
    }
    // key为被信任的人,value为其被信任的次数
    Map<Integer, Integer> map = new HashMap<Integer, Integer>();
    for (int[] arr : trust) {
        map.put(arr[1], map.getOrDefault(arr[1], 0)+1);
    }
    // 找到被信任次数等于N-1的那个人
    int count = -1;
    for (Integer key : map.keySet()) {
        if (map.get(key) == N-1) {
            count = key;
        }
    }
    // 被信任次数等于N-1的人,不能信任其他人
    for (int[] arr : trust) {
        if (arr[0] == count) {
            return -1;
        }
    }
    return count;
}

03 第二种解法

针对第一种解法中的HashMap,我们还可以用int数组进行替换,思路和上面第一种解法一致。

public int findJudge2(int N, int[][] trust) {
    if (N == 1) {
        return N;
    }
    int[] trusted = new int[N+1];
    for (int i=0; i<trust.length; i++) {
        trusted[trust[i][1]]++;
    }
    int count = -1;
    for (int i=0; i<trusted.length; i++) {
        if (trusted[i] == N-1) {
            count = i;
        }
    }
    for (int[] arr : trust) {
        if (arr[0] == count) {
            return -1;
        }
    }
    return count;
}

04 第三种解法

针对第二种解法,我们还可以将其简化成2个for循环,将统计被信任次数和寻找被信任次数最多的人合在一起处理。

public int findJudge3(int N, int[][] trust) {
    if (N == 1) {
        return N;
    }
    int[] trusted = new int[N+1];
    int count = -1, num = -1;
    for (int i=0; i<trust.length; i++) {
        trusted[trust[i][1]]++;
        if (trusted[trust[i][1]] > count) {
            count = trusted[trust[i][1]];
            num = trust[i][1];
        }
    }
    // 被信任次数要等于N-1
    if (count != N-1) {
        return -1;
    }
    for (int[] arr : trust) {
        if (arr[0] == num) {
            return -1;
        }
    }
    return num;
}

05 第四种解法

我们还可以使用两个int数组来解,一个数组arr存信任的人,另一个数组arr2存被信任的人,找出被信任次数等于N-1(arr2[i]=N-1)且没有信任过人(arr[i]=0)的人,他就是法官。

public int findJudge4(int N, int[][] trust) {
    int[] arr = new int[N+1];
    int[] arr2 = new int[N+1];
    for (int i=0; i<trust.length; i++) {
        arr[trust[i][0]]++;
        arr2[trust[i][1]]++;
    }
    for (int j=1; j<arr.length; j++) {
        if (arr[j] == 0 && arr2[j] == N-1) {
            return j;
        }
    }
    return -1;
}

06 小结

算法专题目前已连续日更超过七个月,算法题文章240+篇,公众号对话框回复【数据结构与算法】、【算法】、【数据结构】中的任一关键词,获取系列文章合集。

以上就是全部内容,如果大家有什么好的解法思路、建议或者其他问题,可以下方留言交流,点赞、留言、转发就是对我最大的回报和支持!

IntelliJ IDEA 中git使用说明书 阅读详情

相关推荐

基于FFmpeg与Nginx的大华摄像头实时视频Web接入方案

本文详细介绍了一种基于FFmpeg与Nginx的大华摄像头实时视频Web接入方案。该方案通过FFmpeg将摄像头RTSP协议流转换为浏览器友好的HLS格式,并利用Nginx进行高效分发,最终结合Video.js构建前端播放页面,实现无需插件的跨平台实时监控。方案具有免费、轻量、稳定、易于部署的特点,适合中小企业、个人开发者快速搭建内部监控或展示系统。

weixin_28040125的博客 348

Leetcode 997:找到小镇的法官

题目描述 在一个小镇里,按从1到N标记了N个人。传言称,这些人有一个是小镇上的秘密法官。如果小镇的法官真的存在,那么: 小镇的法官不相信任何人 每个人(除了小镇法官外)都信任小镇的法官 只有一个人同时满足属性1和属性2 给定数组trust,该数组由信任对trust[i] = [a,b]组成,表示标记为a的人信任标记为b的人。 如果小镇存在密码法官并且可以确定他的身份,请返回该法官的标记。...

weixin_35338624的博客 473

ANSYS材料库实战:手把手教你用APDL命令流定义混凝土和形状记忆合金

本文详细介绍了在ANSYS中使用APDL命令流定义混凝土和形状记忆合金(SMA)的高级建模技巧。通过SOLID65单元和SMA本构模型,工程师可以精确模拟非线性材料行为,包括混凝土的开裂和SMA的超弹性效应。文章提供了完整的命令流示例和求解策略优化建议,帮助用户提升工程仿真效率。

hh234的博客 486

leetcode 997. 找到小镇的法官(python)

题目链接 题目描述: 在一个小镇里,按从 1 到 N 标记了 N 个人。传言称,这些人中有一个是小镇上的秘密法官。 如果小镇的法官真的存在,那么: 小镇的法官不相信任何人。 每个人(除了小镇法官外)都信任小镇的法官。 只有一个人同时满足属性 1 和属性 2 。 给定数组 trust,该数组由信任对 trust[i] = [a, b] 组成,表示标记为 a 的人信任标记为 b 的人。 如果小镇存在秘...

weixin_44740082的博客 575

VCSA安装使用和虚拟机数据迁移

VCSA(VMware vCenter Server Appliance)安装使用和虚拟机数据迁移是VMware虚拟化环境中常见的操作。准备工作:首先,确保已从VMware官网下载了正确版本的VCSA安装包。此外,应准备好安装所需的硬件资源,包括足够的CPU、内存和存储空间。安装过程:安装VCSA通常涉及挂载虚拟光驱或解压安装包,然后选择安装并输入相关信息,如ESXi主机的IP地址、用户名和密码,VCSA的虚拟机名称和root密码等。

weixin_68840588的博客 3377

23. STM32F103C8T6 ADC采集光敏电阻传感器模块光照强度实战

本文详细介绍了如何使用STM32F103C8T6的ADC模块采集光敏电阻传感器的光照强度。通过硬件接线、核心原理讲解、四步代码配置(GPIO、ADC模式、使能校准、数据滤波)以及串口验证,手把手指导完成从模拟信号到数字值的完整实战流程,并重点提示了ADC时钟分频等关键配置要点。

weixin_42300144的博客 223

C++Leetcode997:找到小镇的法官

题目 在一个小镇里,按从 1 到 N 标记了 N 个人。传言称,这些人中有一个是小镇上的秘密法官。如果小镇的法官真的存在,那么: 1 小镇的法官不相信任何人。 2 每个人(除了小镇法官外)都信任小镇的法官。 3 只有一个人同时满足属性 1 和属性 2 。 给定数组 trust,该数组由信任对 trust[i] = [a, b] 组成,表示标记为 a 的人信任标记为 b 的人。 如果小镇存在秘密法官...

weixin_43434305的博客 432

BK7238(XH-WB3S)固件烧录实战:从AT固件选择到稳定下载全解析

本文详细解析了BK7238(XH-WB3S)模组固件烧录的全过程,从AT固件版本选择到稳定下载的实战技巧。重点介绍了烧录前的准备工作、硬件连接的正确姿势、烧录软件的实战技巧以及疑难问题排查指南,帮助开发者高效完成BK7238模组的固件烧录。

weixin_29159441的博客 255

Leetcode 997:找到小镇的法官(超详细的解法!!!)

在一个小镇里,按从 1 到 N 标记了 N 个人。传言称,这些人中有一个是小镇上的秘密法官。 如果小镇的法官真的存在,那么: 小镇的法官不相信任何人。 每个人(除了小镇法官外)都信任小镇的法官。 只有一个人同时满足属性 1 和属性 2 。 给定数组 trust,该数组由信任对 trust[i] = [a, b] 组成,表示标记为 a 的人信任标记为 b 的人。 如果小镇存在秘密法官并且可以确定...

coordinate的博客 3257

Android 16(API 36)状态栏颜色适配全攻略:从沉浸式到自定义背景

本文全面解析Android 16(API 36)强制沉浸式状态栏带来的适配挑战,提供了从FrameLayout包裹法到动态修改Window背景色的核心解决方案。针对传统状态栏颜色设置失效问题,详细阐述了如何利用WindowInsets API实现自定义背景,并涵盖全屏模式、Fragment切换及第三方ROM兼容性等实战场景,为开发者提供一站式适配指南。

weixin_29227425的博客 597

用MATLAB从零实现六足机器人步态仿真:交替三角与波动步态保姆级教程

本文详细介绍了如何使用MATLAB从零实现六足机器人的两种经典步态仿真:交替三角支撑步态和波动步态。通过参数定义、相位设置、运动轨迹生成和三维可视化等步骤,帮助读者掌握六足机器人步态规划的核心技术。教程包含完整代码和详细解析,适合机器人爱好者和相关专业学生学习实践。

weixin_26765363的博客 231

LeetCode997.Find the Town Judge(找到小镇的法官)

997.Find the Town Judge(找到小镇的法官)DescriptionDifficulty: easyExample 1:Example 2:Example 3:Example 4:Example 5:Note:分析参考代码 Description In a town, there are N people labelled from 1 to N. There is a rum...

redtongue的博客 810

Qualcomm 常用NV列表

^ NV ITEM ^ 功能^^ |NV10 |mode prefer,找网模式|新平台使用NV80000| ^NV74 NV74=0关闭自动接听电话^ |NV240 |NV240=FALSE|EVDO出现网络的问题,此项必须设定为FALSE| |NV255 |CDMA规避网络列表(SID/NID号)| |NV256 |

sdrgtywretyeruet的专栏 5776

LeetCode //C - 997. Find the Town Judge

Summary: The problem identifies a town judge who is trusted by everyone but trusts no one. The solution involves tracking trust relationships using an array where each person's score reflects their net trust (trust received minus trust given). The judge mu

Made in Code 1261

复分析 阿尔福斯(Ahlfors) 第三版答案 英文

答案分为十章,有部分习题没有答案,全英文复分析阿尔福斯(Ahlfors) 第三版答案

jre9下载 jdk9

(Java SE Runtime Environment 9.0) 9.0u175 官方最新版 【x86|x64】

LeetCode 997. Find the Town Judge

[Easy] LeetCode 997. Find the Town Judge 链接: https://leetcode.com/problems/find-the-town-judge/ 题目描述: In a town, there are N people labelled from 1 to N. There is a rumor that one of these people is secretly the town judge. If the town judge exists, then

MrJustin的博客 257

C# WinForm 基于DirectShow.dll编写的程序,可边预览边保存视频,音频和图片

基于微软的DirectShow.dll的二次开发1.自动识别连接的摄像头跟麦克风且可以对其进行选择(默认选中第一个)2.可录制wmv和avi两种格式的视频并且都带有音频,avi可以录制的分辨率和帧数进行选择,wmv默认进行了淸晰度优化如不喜欢可去除代码中有相关提示3.可在预览点开之后进行拍照,也可边录制视频边拍照4.添加了视频和音频的压缩功能(酌情使用)这次二次开发发现C#对DirectShow的相关信息太少,这次做完也不敢藏私共享出来,还望大家指正

Leetcode 997.找到小镇的法官(Find the Town Judge)

Leetcode 997.找到小镇的法官 1 题目描述(Leetcode题目链接)   在一个小镇里,按从 1 到 N 标记了 N 个人。传言称,这些人中有一个是小镇上的秘密法官。 如果小镇的法官真的存在,那么: 小镇的法官不相信任何人。 每个人(除了小镇法官外)都信任小镇的法官。 只有一个人同时满足属性 1 和属性 2 。 给定数组 trust,该数组由信任对 trust[i] = [a, b] 组成,表示标记为 a 的人信任标记为 b 的人。 如果小镇存在秘密法官并且可以确定他的身份,请返回该法官的

qq_39378221的博客 206

IEM模型,地表粗糙度模拟

利用微波反演土壤水分时候,利用IEM模型可以实现对随机地表的模拟

【LeetCode】997. Find the Town Judge 解题报告(C++)

作者: 负雪明烛 id: fuxuemingzhu 个人博客: http://fuxuemingzhu.cn/ 目录题目描述题目大意解题方法度日期 题目地址:https://leetcode.com/problems/rotting-oranges/ 题目描述 In a town, there are N people labelled from 1 to N. There is a rumo...

负雪明烛 1910

【leetCode】【javascript】997. Find the Town Judge找到小镇的法官

题目描述: In a town, there areNpeople labelled from1toN. There is a rumor that one of these people is secretly the town judge. If thetown judge exists, then: The town judge trusts nobody. Every...

WHY_222的博客 429

LeetCode - 997 - 找到小镇的法官(find-the-town-judge)

一 目录 不折腾的前端,和咸鱼有什么区别目录一 目录二 前言三 解题及测试四 LeetCode Submit五 解题思路二 前言 难度:简单涉及知识:图题目地址:https://leet...

weixin_41806099的博客 287

LeetCode 997 Find the Town Judge 寻找小镇法官 C语言

Find the Town Judge In a town, there are N people labelled from 1 to N. There is a rumor that one of these people is secretly the town judge. If the town judge exists, then: The town judge trusts nobody. Everybody (except for the town judge) trusts the .

高能粒子的博客 524

[leetcode] 997. Find the Town Judge @ python

原题 In a town, there are N people labelled from 1 to N. There is a rumor that one of these people is secretly the town judge. If the town judge exists, then: The town judge trusts nobody. Everybody (e...

闲庭信步 927

【Leetcode】997. Find the Town Judge(找到小镇法官) - 社会名流问题

Desc: N/A Overview社会名流问题997. Find the Town JudgeReference 社会名流问题 接下来的这个例子是算法设计中的一个常见习题,这是一个不需要扫描所有数据(或者绝大部分)就能得到解答的很好例子。 在n个人中,有一个被所有人知道但却不知道别人的人,这个人被定义为社会名流。现在的问题是如果存在,试找出社会名流。你可以使用的唯一方式是询问:“对不起,请问你知道某某人吗?”(假定所有回答都正确,甚至这位社会名流也将回答。)我们的目标是将问题的数目最小化。由于有 n(

「熊猫系列项目」ing 586

Leetcode-997 Find the Town Judge(找到小镇的法官)

作者水平有限,所发仅为个人愚见,如有明显谬误,望斧正 题目可转化为对于所给正整数N(1≤N≤1000),共有N个节点,编号从1-N。其中"相信"这一概念,可看作是一条连接两节点的有向边。如所给二维vector的trust向量数组,trust[i][0]表示有向边的起点,则trust[i][1]表示有向边的终点。所求为满足以下2个条件的节点:①出度(即题目中的属性1)为0 ②入度(即题目中的属性2...

weixin_30322405的博客 83

Leetcode 997. Find the Town Judge

In a town, there are N people labelled from 1 to N.  There is a rumor that one of these people is secretly the town judge. If the town judge exists, then: The town judge trusts nobody. Everybody (...

Dive Deep into The Knowledge 562

LeetCode997. Find the Town Judge

题目  在一个小镇里,按从 1 到 N 标记了 N 个人。传言称,这些人中有一个是小镇上的秘密法官。 如果小镇的法官真的存在,那么: 小镇的法官不相信任何人。 每个人(除了小镇法官外)都信任小镇的法官。 只有一个人同时满足属性 1 和属性 2 。 给定数组 trust,该数组由信任对 trust[i] = [a, b] 组成,表示标记为 a 的人信任标记为 b 的人。 如果小镇存在秘...

Lightmare625 404

LeetCode 997 Find the Town Judge

997 Find the Town Judge https://leetcode.com/problems/find-the-town-judge/ In a town, there are N people labelled from 1 to N. There is a rumor that one of these people is secretly the town judge. If the town judge exists, then: The town judge trusts nobo

cyberickk blog 190
上一篇: LeetCode.989-数组形式的整数做加法(Add to Array-Form of Integer)
下一篇: LeetCode.993-二叉树中的堂兄弟(Cousins in Binary Tree)
程序员小川
博客等级 码龄10年 47粉丝 305原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值