图-入度n-1,出度0-lc997
小镇里有 n 个人,按从 1 到 n 的顺序编号。传言称,这些人中有一个暗地里是小镇法官。
如果小镇法官真的存在,那么:
- 小镇法官不会信任任何人。
- 每个人(除了小镇法官)都信任这位小镇法官。
- 只有一个人同时满足属性 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)
不恋尘世浮华,不写红尘纷扰