小鎮裏有 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)