997. Find the Town Judge
仅供自己学习
思路:
将trust数组视为每个组合例如[1,3] 化为1->3,形成有向图。
因为法官只有N-1个入度,0个出度,所以我们可以通过记录度的多少来判断是否存在法官并找到其标号。
定义一个vector用来记录每个点的度,这里的度的意思是,如果该点有一个出度就-1,如果该点有一个入度就+1。所以法官的度一定是最大的,并且度等于N-1.
我们记录好所有度了就用max_element寻找最大的元素,判断它的度是否等于N-1,不是就return-1。是,再用distance找到最大元素的下标即可。
代码;
1 class Solution { 2 public: 3 int findJudge(int N, vector<vector<int>>& trust) { 4 vector<int> indegree(N+1); 5 int count=0; 6 for(auto& a:trust){ 7 indegree[a[1]]++; 8 indegree[a[0]]--; 9 } 10 auto x=max_element(indegree.begin()+1,indegree.end()); 11 if(*x!=N-1) return -1; 12 int position=distance(begin(indegree),x); 13 return position; 14 } 15 };

浙公网安备 33010602011771号