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
Note:
1 <= N <= 1000
trust.length <= 10000
trust[i]
are all differenttrust[i][0] != trust[i][1]
1 <= trust[i][0], trust[i][1] <= N
看别人答案,用两个数组一个表示信任数一个表示被信任数,有效降低了时间与空间复杂的。class Solution { public: int findJudge(int n, vector<vector<int>>& trust) { if(trust.size()<(n-1)) return -1; vector<vector <int> > ans; vector<int> ans2; int i,k,l; vector<int> v(n); for(i=0;i<n;++i) { ans.push_back(v); } int trustsize=trust.size(); for(i=0;i<trustsize;++i) { ans[trust[i][0]-1][trust[i][1]-1]=1; } int flag=0; for(i=0;i<n;++i) { k=0; for(int j=0;j<n;++j) { k+=ans[j][i]; } if(k==n-1) { if(flag==1) return -1; ans2.push_back(i+1); flag=1; } } if(ans2.size()==1) { for(i=0;i<n;++i) { if(ans[ans2[0]-1][i]!=0) return -1; } return ans2[0]; } return -1; } };