图-入度n-1,出度0-lc997

小镇里有 ​​n​​​ 个人,按从 ​​1​​​ 到 ​​n​​ 的顺序编号。传言称,这些人中有一个暗地里是小镇法官。
如果小镇法官真的存在,那么:

  1. 小镇法官不会信任任何人。
  2. 每个人(除了小镇法官)都信任这位小镇法官。
  3. 只有一个人同时满足属性 1 和属性 2 。
    给你一个数组 ​​trust​​​ ,其中 ​​trust[i] = [ai, bi]​​​ 表示编号为 ​​ai​​​ 的人信任编号为 ​​bi​​ 的人。
    如果小镇法官存在并且可以确定他的身份,请返回该法官的编号;否则,返回 ​​-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提示:
    • ​​1 <= n <= 1000​​
    • ​​0 <= trust.length <= 104​​
    • ​​trust[i].length == 2​​
    • ​​trust​​​ 中的所有​​trust[i] = [ai, bi]​​ 互不相同
    • ​​ai != bi​​
    • ​​1 <= ai, bi <= n​​

思路:可以维护一个图的矩阵,快速定位;也可以维护一个一纬数组,记录其被相信的次数,我用的是第二种
//leetcode submit region begin(Prohibit modification and deletion)
class Solution {
public int findJudge(int n, int[][] trust) {

    if(trust.length==0){
        if(n==1){
            return n;
        }else{
            return -1;
        }
    }


    int[] trustArray = new int[n+1];
    Arrays.fill(trustArray,0);

    for (int i = 0; i < trust.length; i++) {

// System.out.println(trust[i][1]);
trustArray[trust[i][1]]++;
trustArray[trust[i][0]]--;
}

    for (int i = 0; i <= n; i++) {

// System.out.println(i+" "+trustArray[i]);
if(trustArray[i]==n-1){
return i;
}
}
return -1;
}
}
//leetcode submit region end(Prohibit modification and deletion)

posted @ 2023-07-04 10:11  小傻孩丶儿  阅读(10)  评论(0编辑  收藏  举报