LEETCODE 997. Find the Town Judge 解题思路分析

题目大意:

找到小镇的法官

在一个小镇里,按从 1 到 N 标记了 N 个人。传言称,这些人中有一个是小镇上的秘密法官。

如果小镇的法官真的存在,那么:

  1. 小镇的法官不相信任何人。
  2. 每个人(除了小镇法官外)都信任小镇的法官。
  3. 只有一个人同时满足属性 1 和属性 2 。

给定数组 trust,该数组由信任对 trust[i] = [a, b] 组成,表示标记为 a 的人信任标记为 b 的人。

如果小镇存在秘密法官并且可以确定他的身份,请返回该法官的标记。否则,返回 -1。

示例 1:

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

示例 2:

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

示例 3:

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

示例 4:

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

示例 5:

输入: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

如果想查看本题目是哪家公司的面试题,请参考以下免费链接: https://leetcode.jp/problemdetail.php?id=997

解题思路分析:

  1. 先对数据进行一下预处理,分别统计出每个人信任的人数,以及每个人被多少人信任。
  2. 从1到N循环每个人,如果当前人信任人数为0并且被信任人数为N-1,当前人即是法官
  3. 如果循环结束后没找到法官,返回-1。

实现代码:

public int findJudge(int N, int[][] trust) {
    int[] trustOther = new int[N+1]; // 每个人信任的人数
    int[] beTrusted = new int[N+1]; // 每个人被信任的人数
    for(int[] t : trust){
        trustOther[t[0]]++;
        beTrusted[t[1]]++;
    }
    for(int i=1;i<=N;i++){
        // 如果当前人信任的人数等于0并且被信任的人数为N-1,当前人即是法官
        if(trustOther[i]==0&&beTrusted[i]==N-1) return i;
    }
    return -1;
}

本题解法执行时间为2ms。

Runtime: 2 ms, faster than 100.00% of Java online submissions for Find the Town Judge.

Memory Usage: 47.2 MB, less than 100.00% of Java online submissions for Find the Town Judge.

本网站文章均为原创内容,并可随意转载,但请标明本文链接
如有任何疑问可在文章底部留言。为了防止恶意评论,本博客现已开启留言审核功能。但是博主会在后台第一时间看到您的留言,并会在第一时间对您的留言进行回复!欢迎交流!
本文链接: http://leetcode.jp/leetcode-997-find-the-town-judge-解题思路分析/
此条目发表在leetcode分类目录,贴了, , , 标签。将固定链接加入收藏夹。

发表评论

您的电子邮箱地址不会被公开。