建立二维数组,记录信任情况。时间复杂度O(n2)
class Solution {
public:
int findJudge(int n, vector<vector<int>>& trust) {
int judge=-1;
vector<vector<bool>>p(n+5,vector<bool>(n+5,0));
for(int i=0;i<trust.size();i++)
{
p[trust[i][0]][trust[i][1]]=1;
}
for(int i=1;i<=n;i++)
{
for(int j=1;j<=n;j++)
{
if(p[i][j]==1)break;
else if(j==n)
{
judge=i;
i=n+1;
break;
}
}
}
if(judge!=-1)
{
p[judge][judge]=1;
for(int i=1;i<=n;i++)
{
if(p[i][judge]!=1)
{
judge=-1;
break;
}
}
}
return judge;
}
};
官方题解利用各节点的入度和出度,时间复杂度更低,也更简洁。
class Solution {
public:
int findJudge(int n, vector<vector<int>>& trust) {
vector<int>inDegress(n+2,0);
vector<int>outDegress(n+2,0);
for(int i=0;i<trust.size();i++)
{
inDegress[trust[i][1]]+=1;
outDegress[trust[i][0]]+=1;
}
int judge=-1;
for(int i=1;i<=n;i++)
{
if(outDegress[i]==0)
{
judge=i;
if(inDegress[i]!=n-1)judge=-1;
break;
}
}
return judge;
}
};