## 997. Find the Town Judge

In a town, there are `N`

people labelled from `1`

to `N`

. There is a rumor that one of these people is secretly the town judge.

If the town judge exists, then:

- The town judge trusts nobody.
- Everybody (except for the town judge) trusts the town judge.
- There is exactly one person that satisfies properties 1 and 2.

You are given `trust`

, an array of pairs `trust[i] = [a, b]`

representing that the person labelled `a`

trusts the person labelled `b`

.

If the town judge exists and can be identified, return the label of the town judge. Otherwise, return `-1`

.

**Example 1:**

Input:N = 2, trust = [[1,2]]Output:2

**Example 2:**

Input:N = 3, trust = [[1,3],[2,3]]Output:3

**Example 3:**

Input:N = 3, trust = [[1,3],[2,3],[3,1]]Output:-1

**Example 4:**

Input:N = 3, trust = [[1,2],[2,3]]Output:-1

**Example 5:**

Input:N = 4, trust = [[1,3],[1,4],[2,3],[2,4],[4,3]]Output:3

**Constraints:**

`1 <= N <= 1000`

`0 <= trust.length <= 10^4`

`trust[i].length == 2`

`trust[i]`

are all different`trust[i][0] != trust[i][1]`

`1 <= trust[i][0], trust[i][1] <= N`

## Rust Solution

```
struct Solution;
impl Solution {
fn find_judge(n: i32, trust: Vec<Vec<i32>>) -> i32 {
let n = n as usize;
let mut degree = vec![0; n];
for edge in trust {
let u = (edge[0] - 1) as usize;
let v = (edge[1] - 1) as usize;
degree[v] += 1;
degree[u] -= 1;
}
for i in 0..n {
if degree[i] as usize == n - 1 {
return (i + 1) as i32;
}
}
-1
}
}
#[test]
fn test() {
let n = 2;
let trust = vec_vec_i32![[1, 2]];
let res = 2;
assert_eq!(Solution::find_judge(n, trust), res);
let n = 3;
let trust = vec_vec_i32![[1, 3], [2, 3]];
let res = 3;
assert_eq!(Solution::find_judge(n, trust), res);
let n = 3;
let trust = vec_vec_i32![[1, 3], [2, 3], [3, 1]];
let res = -1;
assert_eq!(Solution::find_judge(n, trust), res);
let n = 3;
let trust = vec_vec_i32![[1, 2], [2, 3]];
let res = -1;
assert_eq!(Solution::find_judge(n, trust), res);
let n = 4;
let trust = vec_vec_i32![[1, 3], [1, 4], [2, 3], [2, 4], [4, 3]];
let res = 3;
assert_eq!(Solution::find_judge(n, trust), res);
}
```

Having problems with this solution? Click here to submit an issue on github.