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 };

 

posted @ 2021-03-17 11:20  Mrsdwang  阅读(60)  评论(0)    收藏  举报