LeetCode——997.找到小镇的法官

通过万岁!!!

  • 题目:一个m行2列的数组,然后里面存储的是一个信任关系。每一行[a,b]表示a新人b,然后找到一个法官。法官的特征是所有人都新人她,但是她不新人任何人。并且小镇上有n个人。如果没有法官就返回-1,否则返回这个人的编号。
  • 思路:定义两个数组(当然这里可以用map,但是数组也可以,因为我们知道大小)。trued:trued[i]表示新人i这个人的有多少个;tru:tru[i]表示i新人的人有多少个。注意法官是trued一定是n-1的,因为所有人都信任她;法官的tru一定是0,因为她不相信任何人。
  • 技巧:
    • 这里就是用两个数组去记录,信任的人的个数和被多少人信任的个数,而法官在这里是可以进行区分的。
  • 需要注意,我之前想过用一个数组,信任的时候- -,被信任的时候++,然后最后这个值= =n-1,但是这样存在一个特例子,就是所有人都信任你,但是你刚好信任一个人。这时候就还是= =n-1的。

伪代码

定义数组trued和tru,长度是n+1,这里我们不用0,因为人的编号就是从1开始的。
for遍历数组
        trued[trust[i][1]]++,表示trust[i][1]又被一个人信任了
    tru[trust[i][0]]++,表示trust[i][0]又信任了一个人
for遍历两个数组,
    如果trued[i]==n-1并且tru[i]==0,表示被所有人信任,但是不信任任何人,这时候return 1
最后 return -1;表示不存在法官

java代码

class Solution {
    public int findJudge(int n, int[][] trust) {
        int trued[] = new int[n + 1]; // 0不用,tru[i]表示信任i的人的个数
        int tru[] = new int[n + 1];// 0不用,trued[i]表示i新人的人的个数
        for (int i = 0; i < trust.length; i++) {
            trued[trust[i][1]]++;
            tru[trust[i][0]]++;
        }
        for (int i = 1; i <= n; i++) {
            if (trued[i] == n - 1 && tru[i] == 0) {// 所有人都信任她,但是她不新人任何人
                return i;
            }
        }
        return -1;
    }
}
  • 总结:题目不是很难,主要是知道法官具有什么特点,然后我们根据这个特点,挑选出来就行了。
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值